]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Provide source level debug ability in *unix environment.
authoreric_tian <eric_tian@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 30 Jun 2008 06:25:43 +0000 (06:25 +0000)
committereric_tian <eric_tian@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 30 Jun 2008 06:25:43 +0000 (06:25 +0000)
[Background]
The UnixPkg provide an simulator in *unix. To support source level debug, we need force all modules be built as ELF shard objects and dynamically load all of modules using dlopen(). For peicore, peim and dxecore, we provide a wrapper to provide PeCoffLoader interface

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5382 6f19259b-4bc3-4df7-8a09-765794883524

BaseTools/Conf/tools_def.template
UnixPkg/Sec/SecMain.c
UnixPkg/UnixPkg.dsc

index 1b2e44c85f77e121afa3ea781aa7352902a075f2..76cbec51527086ee62fab8142fd4fecf280f814e 100644 (file)
@@ -504,7 +504,8 @@ RELEASE_WINDDK3790x1830_IPF_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB /LTCG /DLL /OPT
 \r
 *_ELFGCC_*_MAKE_FLAGS                   = -i\r
 *_ELFGCC_IA32_CC_FLAGS                   = -m32 -g -fshort-wchar -fno-strict-aliasing -Wall -malign-double -c -include $(DEST_DIR_DEBUG)/AutoGen.h -DSTRING_ARRAY_NAME=$(BASE_NAME)Strings\r
-*_ELFGCC_*_DLINK_FLAGS                   = -melf_i386 -nostdlib -n -q -Ttext 0x220 --entry $(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT)\r
+*_ELFGCC_*_DLINK_FLAGS                   = -melf_i386 -nostdlib --entry $(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT)\r
+#*_ELFGCC_*_DLINK_FLAGS                   = -melf_i386 -nostdlib -n -q -Ttext 0x220 --entry $(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT)\r
 *_ELFGCC_*_ASM_FLAGS                     = -c -x assembler -imacros $(DEST_DIR_DEBUG)/AutoGen.h\r
 *_ELFGCC_*_PP_FLAGS                      = -m32 -E -x assembler-with-cpp -include $(DEST_DIR_DEBUG)/AutoGen.h\r
 *_ELFGCC_*_VFRPP_FLAGS                   = -x c -E -P -DVFRCOMPILE --include AutoGen.h\r
index a6da20b135e540745a162aed625b46c6cf014f78..bfa44e7a17789c1f4247b032d9e2f3b905bb4f4f 100644 (file)
@@ -983,6 +983,21 @@ SecNt32PeCoffRelocateImage (
      (unsigned long)ImageContext->ImageAddress,
      (unsigned long)ImageContext->EntryPoint);
 
+  Handle = dlopen(ImageContext->PdbPointer, RTLD_NOW);
+  
+  if (Handle) {
+    Entry = dlsym(Handle, "_ModuleEntryPoint");
+  } else {
+    printf("%s\n", dlerror());  
+  }
+  
+  if (Entry != NULL) {
+    ImageContext->EntryPoint = Entry;
+    printf("Change %s Entrypoint to :0x%08lx\n", ImageContext->PdbPointer, Entry);
+  } else {
+    printf("Could not find _ModuleEntryPoint Entry, Module may be built error\n");
+  }
+
   SecUnixLoaderBreak ();
 
   return Status;
index 2ff9efca2ba8a03e994c57bb664707ac0acc774c..7db8d82fc1563d1a3aefa9fb5ba3dac817cad6c8 100644 (file)
   }\r
 \r
 [BuildOptions]\r
-  #DEBUG_*_IA32_DLINK_FLAGS = --shared\r
+  DEBUG_*_IA32_DLINK_FLAGS = --shared\r
   *_*_IA32_CC_FLAGS = -idirafter/usr/include\r