diff --git a/Makefile b/Makefile
index 91f7c9272604a65ed2f6def87e6cfc7dd43a4f55..b9805c77e0a4bb4a47a3976c802e4872b715ccce 100644
--- a/Makefile
+++ b/Makefile
@@ -151,10 +151,9 @@ TF_CFLAGS		+=	$(CPPFLAGS) $(TF_CFLAGS_$(ARCH))		\
 				-ffreestanding -fno-builtin -Wall -std=gnu99	\
 				-Os -ffunction-sections -fdata-sections
 
-LDFLAGS			+=	$(LDFLAGS_$(ARCH))
-LDFLAGS			+=	--fatal-warnings -O1
-LDFLAGS			+=	--gc-sections
-
+TF_LDFLAGS		+=	--fatal-warnings -O1
+TF_LDFLAGS		+=	--gc-sections
+TF_LDFLAGS		+=	$(TF_LDFLAGS_$(ARCH))
 
 ################################################################################
 # Common sources and include directories
diff --git a/docs/user-guide.md b/docs/user-guide.md
index 1a07954afae6d16eab9202eb55caf679794bd662..29691c5be9601f9f729ae508cb22ec6c22455d0f 100644
--- a/docs/user-guide.md
+++ b/docs/user-guide.md
@@ -269,6 +269,9 @@ performed.
 *   `BUILD_STRING`: Input string for VERSION_STRING, which allows the TF build
     to be uniquely identified. Defaults to the current git commit id.
 
+*   `CFLAGS`: Extra user options appended on the compiler's command line in
+    addition to the options set by the build system.
+
 *   `COLD_BOOT_SINGLE_CPU`: This option indicates whether the platform may
     release several CPUs out of reset. It can take either 0 (several CPUs may be
     brought up) or 1 (only one CPU will ever be brought up during cold reset).
@@ -385,6 +388,9 @@ performed.
     AArch64 and facilitates the loading of `SP_MIN` and BL33 as AArch32 executable
     images.
 
+*   `LDFLAGS`: Extra user options appended to the linkers' command line in
+    addition to the one set by the build system.
+
 *   `LOAD_IMAGE_V2`: Boolean option to enable support for new version (v2) of
     image loading, which provides more flexibility and scalability around what
     images are loaded and executed during boot. Default is 0.
@@ -684,11 +690,15 @@ NOTE: Using `-O0` could cause output images to be larger and base addresses
 might need to be recalculated (see the **Memory layout on ARM development
 platforms** section in the [Firmware Design]).
 
-Extra debug options can be passed to the build system by setting `CFLAGS`:
+Extra debug options can be passed to the build system by setting `CFLAGS` or
+`LDFLAGS`:
 
     CFLAGS='-O0 -gdwarf-2'                                     \
     make PLAT=<platform> DEBUG=1 V=1 all
 
+Note that using `-Wl,` style compilation driver options in `CFLAGS` will be
+ignored as the linker is called directly.
+
 It is also possible to introduce an infinite loop to help in debugging the
 post-BL2 phase of the Trusted Firmware. This can be done by rebuilding BL1 with
 the `SPIN_ON_BL1_EXIT=1` build flag. Refer to the "Summary of build options"
diff --git a/lib/cpus/cpu-ops.mk b/lib/cpus/cpu-ops.mk
index 218a5482fe70020e0198bed5357bb613f3f58ad9..ad3297196ba3c1b07ceb4b310df5b6bdbd369fba 100644
--- a/lib/cpus/cpu-ops.mk
+++ b/lib/cpus/cpu-ops.mk
@@ -145,10 +145,10 @@ $(eval $(call add_define,ERRATA_A57_833471))
 
 # Errata build flags
 ifneq (${ERRATA_A53_843419},0)
-LDFLAGS_aarch64		+= --fix-cortex-a53-843419
+TF_LDFLAGS_aarch64	+= --fix-cortex-a53-843419
 endif
 
 ifneq (${ERRATA_A53_835769},0)
 TF_CFLAGS_aarch64	+= -mfix-cortex-a53-835769
-LDFLAGS_aarch64		+= --fix-cortex-a53-835769
+TF_LDFLAGS_aarch64	+= --fix-cortex-a53-835769
 endif
diff --git a/make_helpers/build_macros.mk b/make_helpers/build_macros.mk
index 34d82c9a373c7b06ccd31d66f4ccbba205373642..aee045dee8d2bbee396202c83e6c178c75048999 100644
--- a/make_helpers/build_macros.mk
+++ b/make_helpers/build_macros.mk
@@ -313,8 +313,8 @@ else
 	       const char version_string[] = "${VERSION_STRING}";' | \
 		$$(CC) $$(TF_CFLAGS) $$(CFLAGS) -xc -c - -o $(BUILD_DIR)/build_message.o
 endif
-	$$(Q)$$(LD) -o $$@ $$(LDFLAGS) -Map=$(MAPFILE) --script $(LINKERFILE) \
-					$(BUILD_DIR)/build_message.o $(OBJS)
+	$$(Q)$$(LD) -o $$@ $$(TF_LDFLAGS) $$(LDFLAGS) -Map=$(MAPFILE) \
+		--script $(LINKERFILE) $(BUILD_DIR)/build_message.o $(OBJS)
 
 $(DUMP): $(ELF)
 	@echo "  OD      $$@"