:: commit b46d36b8cae1a7ee729e10ce58ebbd641520b00e

Mintsuki <mintsuki@protonmail.com> — 2025-07-10 14:32

parents: d544a4962a

build: Use nm instead of objdump for generating symbol table

diff --git a/common/common.mk b/common/common.mk
index 85c4c480..88cd1b51 100644
--- a/common/common.mk
+++ b/common/common.mk
@@ -4,7 +4,7 @@ MAKEFLAGS += -rR
 include $(TOOLCHAIN_FILE)
 export CC_FOR_TARGET
 export LD_FOR_TARGET
-export OBJDUMP_FOR_TARGET
+export NM_FOR_TARGET
 export OBJCOPY_FOR_TARGET
 export READELF_FOR_TARGET
 
diff --git a/common/gensyms.sh b/common/gensyms.sh
index e79bec74..d992235b 100755
--- a/common/gensyms.sh
+++ b/common/gensyms.sh
@@ -28,9 +28,9 @@ TMP4="$(mktemp)"
 
 trap 'rm -f "$TMP1" "$TMP2" "$TMP3" "$TMP4"' EXIT
 
-"$OBJDUMP_FOR_TARGET" -t "$1" | ( "$SED" '/[[:<:]]d[[:>:]]/d' 2>/dev/null || "$SED" '/\bd\b/d' ) | sort > "$TMP1"
-"$GREP" "F $4" < "$TMP1" | cut -d' ' -f1 > "$TMP2"
-"$GREP" "F $4" < "$TMP1" | "$AWK" 'NF{ print $NF }' > "$TMP3"
+"$NM_FOR_TARGET" -n "$1" | "$GREP" -i ' t ' > "$TMP1"
+"$AWK" '{ print $1 }' "$TMP1" > "$TMP2"
+"$AWK" '{ print $3 }' "$TMP1" > "$TMP3"
 
 echo ".section .$2_map" > "$TMP4"
 echo ".globl $2_map" >> "$TMP4"
diff --git a/configure.ac b/configure.ac
index 441838f7..7a5bb7a8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -116,8 +116,8 @@ AC_CHECK_HEADERS([stdint.h stddef.h stdbool.h limits.h inttypes.h stdio.h stdlib
 AC_ARG_VAR([TOOLCHAIN_FOR_TARGET], [alternative toolchain prefix for Limine (or 'llvm', or 'gnu')])
 AC_ARG_VAR([CC_FOR_TARGET], [C compiler command for Limine])
 AC_ARG_VAR([LD_FOR_TARGET], [linker command for Limine])
+AC_ARG_VAR([NM_FOR_TARGET], [nm command for Limine])
 AC_ARG_VAR([OBJCOPY_FOR_TARGET], [objcopy command for Limine])
-AC_ARG_VAR([OBJDUMP_FOR_TARGET], [objdump command for Limine])
 AC_ARG_VAR([READELF_FOR_TARGET], [readelf command for Limine])
 
 rm -rf toolchain-files
@@ -171,10 +171,10 @@ else
         FREESTANDING_CC="$CC_FOR_TARGET" \
         WANT_FREESTANDING_LD=yes \
         FREESTANDING_LD="$LD_FOR_TARGET" \
+        WANT_FREESTANDING_NM=yes \
+        FREESTANDING_NM="$NM_FOR_TARGET" \
         WANT_FREESTANDING_OBJCOPY=yes \
         FREESTANDING_OBJCOPY="$OBJCOPY_FOR_TARGET" \
-        WANT_FREESTANDING_OBJDUMP=yes \
-        FREESTANDING_OBJDUMP="$OBJDUMP_FOR_TARGET" \
         WANT_FREESTANDING_READELF=yes \
         FREESTANDING_READELF="$READELF_FOR_TARGET" \
         "$SRCDIR/build-aux/freestanding-toolchain/freestanding-toolchain" 2>"toolchain-files/bios-i686-toolchain.mk" || exit 1
@@ -203,10 +203,10 @@ else
         FREESTANDING_CC="$CC_FOR_TARGET" \
         WANT_FREESTANDING_LD=yes \
         FREESTANDING_LD="$LD_FOR_TARGET" \
+        WANT_FREESTANDING_NM=yes \
+        FREESTANDING_NM="$NM_FOR_TARGET" \
         WANT_FREESTANDING_OBJCOPY=yes \
         FREESTANDING_OBJCOPY="$OBJCOPY_FOR_TARGET" \
-        WANT_FREESTANDING_OBJDUMP=yes \
-        FREESTANDING_OBJDUMP="$OBJDUMP_FOR_TARGET" \
         "$SRCDIR/build-aux/freestanding-toolchain/freestanding-toolchain" 2>"toolchain-files/uefi-i686-toolchain.mk" || exit 1
     BUILD_UEFI_IA32="limine-uefi-ia32"
     NEED_NASM=yes
@@ -232,10 +232,10 @@ else
         FREESTANDING_CC="$CC_FOR_TARGET" \
         WANT_FREESTANDING_LD=yes \
         FREESTANDING_LD="$LD_FOR_TARGET" \
+        WANT_FREESTANDING_NM=yes \
+        FREESTANDING_NM="$NM_FOR_TARGET" \
         WANT_FREESTANDING_OBJCOPY=yes \
         FREESTANDING_OBJCOPY="$OBJCOPY_FOR_TARGET" \
-        WANT_FREESTANDING_OBJDUMP=yes \
-        FREESTANDING_OBJDUMP="$OBJDUMP_FOR_TARGET" \
         "$SRCDIR/build-aux/freestanding-toolchain/freestanding-toolchain" 2>"toolchain-files/uefi-x86_64-toolchain.mk" || exit 1
     BUILD_UEFI_X86_64="limine-uefi-x86-64"
     NEED_NASM=yes
@@ -261,10 +261,10 @@ else
         FREESTANDING_CC="$CC_FOR_TARGET" \
         WANT_FREESTANDING_LD=yes \
         FREESTANDING_LD="$LD_FOR_TARGET" \
+        WANT_FREESTANDING_NM=yes \
+        FREESTANDING_NM="$NM_FOR_TARGET" \
         WANT_FREESTANDING_OBJCOPY=yes \
         FREESTANDING_OBJCOPY="$OBJCOPY_FOR_TARGET" \
-        WANT_FREESTANDING_OBJDUMP=yes \
-        FREESTANDING_OBJDUMP="$OBJDUMP_FOR_TARGET" \
         "$SRCDIR/build-aux/freestanding-toolchain/freestanding-toolchain" 2>"toolchain-files/uefi-aarch64-toolchain.mk" || exit 1
     BUILD_UEFI_AARCH64="limine-uefi-aarch64"
 fi
@@ -289,10 +289,10 @@ else
         FREESTANDING_CC="$CC_FOR_TARGET" \
         WANT_FREESTANDING_LD=yes \
         FREESTANDING_LD="$LD_FOR_TARGET" \
+        WANT_FREESTANDING_NM=yes \
+        FREESTANDING_NM="$NM_FOR_TARGET" \
         WANT_FREESTANDING_OBJCOPY=yes \
         FREESTANDING_OBJCOPY="$OBJCOPY_FOR_TARGET" \
-        WANT_FREESTANDING_OBJDUMP=yes \
-        FREESTANDING_OBJDUMP="$OBJDUMP_FOR_TARGET" \
         "$SRCDIR/build-aux/freestanding-toolchain/freestanding-toolchain" 2>"toolchain-files/uefi-riscv64-toolchain.mk" || exit 1
     BUILD_UEFI_RISCV64="limine-uefi-riscv64"
 fi
@@ -317,10 +317,10 @@ else
         FREESTANDING_CC="$CC_FOR_TARGET" \
         WANT_FREESTANDING_LD=yes \
         FREESTANDING_LD="$LD_FOR_TARGET" \
+        WANT_FREESTANDING_NM=yes \
+        FREESTANDING_NM="$NM_FOR_TARGET" \
         WANT_FREESTANDING_OBJCOPY=yes \
         FREESTANDING_OBJCOPY="$OBJCOPY_FOR_TARGET" \
-        WANT_FREESTANDING_OBJDUMP=yes \
-        FREESTANDING_OBJDUMP="$OBJDUMP_FOR_TARGET" \
         "$SRCDIR/build-aux/freestanding-toolchain/freestanding-toolchain" 2>"toolchain-files/uefi-loongarch64-toolchain.mk" || exit 1
     BUILD_UEFI_LOONGARCH64="limine-uefi-loongarch64"
 fi
diff --git a/test/test.mk b/test/test.mk
index 9cdcd9ec..2f11bb35 100644
--- a/test/test.mk
+++ b/test/test.mk
@@ -1,7 +1,7 @@
 include $(TOOLCHAIN_FILE)
 export CC_FOR_TARGET
 export LD_FOR_TARGET
-export OBJDUMP_FOR_TARGET
+export NM_FOR_TARGET
 export OBJCOPY_FOR_TARGET
 export READELF_FOR_TARGET
 
tab: 248 wrap: offon