From c0a2b3db1088af888d98c2223a648bc6f6274eea Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Mon, 16 Nov 2015 11:09:03 -0500 Subject: [PATCH] Make makeguids generate guid-symbols.c instead of .S Just makes it a little easier to debug. Signed-off-by: Peter Jones --- .gitignore | 1 + Make.defaults | 1 - src/Makefile | 12 ++++++------ src/makeguids.c | 49 ++++++++++++++++++++----------------------------- 4 files changed, 27 insertions(+), 36 deletions(-) diff --git a/.gitignore b/.gitignore index cc47ed2..245d33e 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ core.* src/efivar src/efivar-static src/makeguids +src/guid-symbols.c diff --git a/Make.defaults b/Make.defaults index c63b65a..719f197 100644 --- a/Make.defaults +++ b/Make.defaults @@ -37,6 +37,5 @@ ccldflags = $(cflags) $(CCLDFLAGS) $(LDFLAGS) \ $(if $(filter $(CCLD),clang),$(clang_ccldflags),) \ $(if $(filter $(CCLD),gcc),$(gcc_ccldflags),) \ $(call pkg-config-ccldflags) -CPPFLAGS?= SOFLAGS=-shared LDLIBS=$(foreach lib,$(LIBS),-l$(lib)) $(call pkg-config-ldlibs) diff --git a/src/Makefile b/src/Makefile index 1874253..8d29359 100644 --- a/src/Makefile +++ b/src/Makefile @@ -15,23 +15,23 @@ TARGETS=$(LIBTARGETS) $(STATICLIBTARGETS) $(BINTARGETS) $(PCTARGETS) LIBEFIBOOT_SOURCES = crc32.c creator.c disk.c gpt.c linux.c loadopt.c LIBEFIBOOT_OBJECTS = $(patsubst %.c,%.o,$(LIBEFIBOOT_SOURCES)) LIBEFIVAR_SOURCES = dp.c dp-acpi.c dp-hw.c dp-media.c dp-message.c \ - efivarfs.c export.c guid.c guids.S guid-symbols.S \ + efivarfs.c export.c guid.c guids.S guid-symbols.c \ lib.c vars.c LIBEFIVAR_OBJECTS = $(patsubst %.S,%.o,$(patsubst %.c,%.o,$(LIBEFIVAR_SOURCES))) EFIVAR_SOURCES = efivar.c -GENERATED_SOURCES = include/efivar/efivar-guids.h guid-symbols.S +GENERATED_SOURCES = include/efivar/efivar-guids.h guid-symbols.c MAKEGUIDS_SOURCES = makeguids.c guid.c ALL_SOURCES=$(LIBEFIBOOT_SOURCES) $(LIBEFIVAR_SOURCES) $(MAKEGUIDS_SOURCES) \ $(wildcard include/efivar/*.h) $(GENERATED_SOURCES) $(EFIVAR_SOURCES) all : deps $(TARGETS) -./guid-symbols.S : include/efivar/efivar-guids.h +./guid-symbols.c : include/efivar/efivar-guids.h ./guids.bin : include/efivar/efivar-guids.h ./names.bin : include/efivar/efivar-guids.h include/efivar/efivar-guids.h : makeguids guids.txt ./makeguids guids.txt guids.bin names.bin \ - guid-symbols.S include/efivar/efivar-guids.h + guid-symbols.c include/efivar/efivar-guids.h makeguids : CPPFLAGS+=-DEFIVAR_BUILD_ENVIRONMENT makeguids : LIBS=dl @@ -68,7 +68,7 @@ deps :: $(ALL_SOURCES) clean : @rm -rfv *~ *.o *.a *.E *.so *.so.* *.pc *.bin .*.d \ - makeguids guid-symbols.S include/efivar/efivar-guids.h \ + makeguids guid-symbols.c include/efivar/efivar-guids.h \ $(BINTARGETS) @# remove the deps files we used to create, as well. @rm -rfv .*.P .*.h.P *.S.P include/efivar/.*.h.P @@ -92,6 +92,6 @@ test : all .PHONY: test .SECONDARY : libefivar.so.$(VERSION) libefivar.so.$(MAJOR_VERSION) .SECONDARY : libefiboot.so.$(VERSION) libefiboot.so.$(MAJOR_VERSION) -.SECONDARY : include/efivar/efivar-guids.h guid-symbols.S +.SECONDARY : include/efivar/efivar-guids.h guid-symbols.c .INTERMEDIATE : guids.bin names.bin .PRECIOUS : guid-symbols.o makeguids diff --git a/src/makeguids.c b/src/makeguids.c index 62f0ad2..af65b80 100644 --- a/src/makeguids.c +++ b/src/makeguids.c @@ -150,46 +150,37 @@ main(int argc, char *argv[]) fprintf(header, "#ifndef EFIVAR_GUIDS_H\n#define EFIVAR_GUIDS_H 1\n\n"); - for (unsigned int i = 0; i < line-1; i++) { - if (!strcmp(outbuf[i].symbol, "efi_guid_zero")) - fprintf(symout, "\t.globl %s\n" - "\t.data\n" - "\t.balign 1\n" - "\t.type %s, %%object\n" - "\t.size %s, %s_end - %s\n", - "efi_guid_empty", "efi_guid_empty", - "efi_guid_empty", "efi_guid_empty", - "efi_guid_empty"); - fprintf(symout, "\t.globl %s\n" - "\t.data\n" - "\t.balign 1\n" - "\t.type %s, %%object\n" - "\t.size %s, %s_end - %s\n" - "%s:\n", - outbuf[i].symbol, - outbuf[i].symbol, - outbuf[i].symbol, - outbuf[i].symbol, - outbuf[i].symbol, - outbuf[i].symbol); - if (!strcmp(outbuf[i].symbol, "efi_guid_zero")) - fprintf(symout, "efi_guid_empty:\n"); + fprintf(symout, "#include \n\n"); + for (unsigned int i = 0; i < line-1; i++) { uint8_t *guid_data = (uint8_t *) &outbuf[i].guid; - for (unsigned int j = 0; j < sizeof (efi_guid_t); j++) - fprintf(symout,"\t.byte 0x%02x\n", guid_data[j]); - fprintf(symout, "%s_end:\n", outbuf[i].symbol); if (!strcmp(outbuf[i].symbol, "efi_guid_zero")) { - fprintf(symout, "efi_guid_empty_end:\n"); + fprintf(symout, "const efi_guid_t\n" + "__attribute__((__visibility__ (\"default\")))\n" + "efi_guid_empty = {0x1,0x0,0x0,0x0,{0x0,0x0,0x0,0x0,0x0,0x0}};\n\n"); + } + if (!strcmp(outbuf[i].symbol, "efi_guid_zero")) { fprintf(header, "extern const efi_guid_t efi_guid_empty __attribute__((__visibility__ (\"default\")));\n"); } fprintf(header, "extern const efi_guid_t %s __attribute__((__visibility__ (\"default\")));\n", outbuf[i].symbol); + + fprintf(symout, "const \n" + "__attribute__((__visibility__ (\"default\")))\n" + "efi_guid_t %s = {0x%02x%02x%02x%02x,0x%02x%02x,0x%02x%02x,0x%02x%02x,{0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x}};\n\n", + outbuf[i].symbol, + guid_data[3], guid_data[2], + guid_data[1], guid_data[0], + guid_data[5], guid_data[4], + guid_data[7], guid_data[6], + guid_data[8], guid_data[9], + guid_data[10], guid_data[11], + guid_data[12], guid_data[13], + guid_data[14], guid_data[15]); } fprintf(header, "\n#endif /* EFIVAR_GUIDS_H */\n"); - fprintf(symout, "#if defined(__linux__) && defined(__ELF__)\n.section .note.GNU-stack,\"\",%%progbits\n#endif"); fclose(header); fclose(symout); -- 2.11.0