@@ -73,7 +73,7 @@ static void parse_options(Stack* stack, Options* options) {
73
73
String TANGRAM_SUPPRESS_ARGS = STRING_LITERAL ("TANGRAM_SUPPRESS_ARGS" );
74
74
String TANGRAM_SUPPRESS_ENV = STRING_LITERAL ("TANGRAM_SUPPRESS_ENV" );
75
75
String TANGRAM_TRACING = STRING_LITERAL ("TANGRAM_TRACING" );
76
-
76
+
77
77
char * * itr , * * end ;
78
78
79
79
// Parse args.
@@ -609,7 +609,7 @@ static int read_and_process_manifest (
609
609
if (!options -> suppress_env ) {
610
610
for (int i = 0 ; i < stack -> envc ; i ++ ) {
611
611
char * e = stack -> envp [i ];
612
-
612
+
613
613
// Find the length and midpoint of the env var.
614
614
size_t n = 0 ;
615
615
size_t m = 0 ;
@@ -629,7 +629,7 @@ static int read_and_process_manifest (
629
629
key .ptr = ALLOC_N (arena , m + 1 , uint8_t );
630
630
key .len = m ;
631
631
memcpy (key .ptr , e , m );
632
-
632
+
633
633
String val = {0 };
634
634
val .ptr = ALLOC_N (arena , n - m , uint8_t );
635
635
val .len = n - m - 1 ;
@@ -774,15 +774,15 @@ void exec (Arena* arena, Manifest* manifest, char* argv0, Options* options) {
774
774
// Sanity check.
775
775
ABORT_IF (!manifest -> executable .ptr , "missing executable" );
776
776
ABORT_IF (!argv0 , "missing argv0" );
777
-
777
+
778
778
// Get the executable path.
779
779
char * pathname = manifest -> interpreter .ptr
780
780
? cstr (arena , manifest -> interpreter )
781
781
: cstr (arena , manifest -> executable );
782
782
783
783
// Compute argc.
784
- size_t argc = manifest -> argc
785
- + manifest -> interp_argc
784
+ size_t argc = manifest -> argc
785
+ + manifest -> interp_argc
786
786
+ 1 // pathname
787
787
+ 1 // --argv0
788
788
+ 1 // argv[0]
@@ -792,7 +792,7 @@ void exec (Arena* arena, Manifest* manifest, char* argv0, Options* options) {
792
792
// Create argv, envp
793
793
char * * argv = ALLOC_N (arena , argc + 1 , char * );
794
794
char * * envp = ALLOC_N (arena , manifest -> env .size + 1 , char * );
795
-
795
+
796
796
// Fill argv.
797
797
size_t n = 0 ;
798
798
argv [n ++ ] = pathname ;
@@ -870,13 +870,13 @@ void _stub_start (void *sp) {
870
870
871
871
if (options .enable_tracing ) {
872
872
trace (
873
- "options: enable_tracing:%d, suppress_args:%d, suppress_env:%d, loader_cli:%d\n" ,
873
+ "options: enable_tracing:%d, suppress_args:%d, suppress_env:%d, loader_cli:%d\n" ,
874
874
options .enable_tracing , options .suppress_args , options .suppress_env , options .loader_cli
875
875
);
876
876
trace ("original stack:\n" );
877
877
print_stack (& stack );
878
878
}
879
-
879
+
880
880
// Check for reentrancy.
881
881
if (stack .envc ) {
882
882
String tangram_entrypoint = STRING_LITERAL ("TANGRAM_REENTRY=" );
@@ -892,12 +892,11 @@ void _stub_start (void *sp) {
892
892
trace ("TANGRAM_REENTRY: %lx\n" , original_entrypoint );
893
893
}
894
894
stack .envp [stack .envc ] = "TANGRAM_REENTRY=0" ;
895
- BREAK ;
896
895
transfer_control (sp , (void * )original_entrypoint );
897
896
}
898
897
}
899
898
}
900
-
899
+
901
900
// We need to search the aux vector for the program header table and index of the entry point.
902
901
Elf64_Phdr * phdr = (Elf64_Phdr * )stack .auxv_glob [AT_PHDR ];
903
902
uint64_t ph_num = (uint64_t )stack .auxv_glob [AT_PHNUM ];
@@ -908,7 +907,7 @@ void _stub_start (void *sp) {
908
907
if (options .enable_tracing ) {
909
908
trace ("initialized arena\n" );
910
909
}
911
-
910
+
912
911
// Search for the positions of AT_ENTRY, AT_BASE, AT_PHDR, AT_PHNUM
913
912
int nentry = -1 ;
914
913
int nbase = -1 ;
@@ -1004,7 +1003,7 @@ void _stub_start (void *sp) {
1004
1003
if (nbase >= 0 ) {
1005
1004
stack .auxv [nbase ].a_un .a_val = loaded .base_address ;
1006
1005
}
1007
-
1006
+
1008
1007
// Set the entrypoint as the interpreter.
1009
1008
entrypoint = (void * )(loaded .base_address + loaded .entry );
1010
1009
@@ -1055,6 +1054,6 @@ void _stub_start (void *sp) {
1055
1054
trace ("about to transfer control\n" );
1056
1055
trace ("entrypoint: 0x%lx\n" , (uintptr_t )entrypoint );
1057
1056
}
1058
- // BREAK;
1057
+
1059
1058
transfer_control (sp , entrypoint );
1060
1059
}
0 commit comments