From e0a0d07cb37f8891c0096cb9bd7ceb70c8a49c54 Mon Sep 17 00:00:00 2001 From: Alexander Senier Date: Thu, 7 Feb 2019 15:39:26 +0100 Subject: [PATCH] Port libc-based "fat" Ada runtime --- include/ada/component.h | 37 ++ lib/import/import-ada.mk | 12 + lib/mk/ada.inc | 11 + lib/mk/ada.mk | 93 ++++ lib/symbols/ada | 928 +++++++++++++++++++++++++++++++++++++++ run/test-ada.run | 59 +++ src/test/ada/except.adb | 21 + src/test/ada/except.ads | 8 + src/test/ada/main.adb | 26 ++ src/test/ada/startup.cc | 14 + src/test/ada/target.mk | 6 + 11 files changed, 1215 insertions(+) create mode 100644 include/ada/component.h create mode 100644 lib/import/import-ada.mk create mode 100644 lib/mk/ada.inc create mode 100644 lib/mk/ada.mk create mode 100644 lib/symbols/ada create mode 100644 run/test-ada.run create mode 100644 src/test/ada/except.adb create mode 100644 src/test/ada/except.ads create mode 100644 src/test/ada/main.adb create mode 100644 src/test/ada/startup.cc create mode 100644 src/test/ada/target.mk diff --git a/include/ada/component.h b/include/ada/component.h new file mode 100644 index 0000000..399c6a7 --- /dev/null +++ b/include/ada/component.h @@ -0,0 +1,37 @@ +#ifndef _INCLUDE__ADA__COMPONENT_H_ +#define _INCLUDE__ADA__COMPONENT_H_ + +#include + +namespace Ada { namespace Component { + /** + * Run ada main program + */ + void main(void); +} } + +namespace Libc { namespace Component { + + extern "C" void adainit(void); + extern "C" void adafinal(void); + + extern "C" void __gnat_runtime_initialize(void) { }; + extern "C" void __gnat_runtime_finalize(void) { }; + extern "C" int gnat_exit_status; + + /** + * Construct component + * + * \param env extended interface to the component's execution environment + */ + void construct(Libc::Env &env) { + Libc::with_libc([&] () { + adainit(); + Ada::Component::main(); + adafinal(); + }); + env.parent().exit(gnat_exit_status); + } +} } + +#endif /* _INCLUDE__ADA__COMPONENT_H_ */ diff --git a/lib/import/import-ada.mk b/lib/import/import-ada.mk new file mode 100644 index 0000000..64514e5 --- /dev/null +++ b/lib/import/import-ada.mk @@ -0,0 +1,12 @@ +ADA_RTS = $(BUILD_BASE_DIR)/var/libcache/ada + +ADA_RTS_SOURCE = $(call select_from_ports,ada-runtime)/ada-runtime/contrib/gcc-6.3.0 +ADA_RUNTIME_COMMON_DIR = $(call select_from_ports,ada-runtime)/ada-runtime/src/common +ADA_RUNTIME_DIR = $(call select_from_ports,ada-runtime)/ada-runtime/src/fat +ADA_RUNTIME_LIB_DIR = $(call select_from_ports,ada-runtime)/ada-runtime/src/lib +ADA_RUNTIME_PLATFORM_DIR = $(call select_from_ports,ada-runtime)/ada-runtime/platform + +INC_DIR += $(ADA_RUNTIME_LIB_DIR) +INC_DIR += $(ADA_RTS_SOURCE) +INC_DIR += $(ADA_RUNTIME_DIR) +INC_DIR += $(ADA_RUNTIME_COMMON_DIR) diff --git a/lib/mk/ada.inc b/lib/mk/ada.inc new file mode 100644 index 0000000..3077f72 --- /dev/null +++ b/lib/mk/ada.inc @@ -0,0 +1,11 @@ +include $(REP_DIR)/lib/import/import-ada.mk + +all: ada_source_path + +ada_source_path: ada_object_path + $(VERBOSE)echo $(ADA_RTS_SOURCE) > $(ADA_RTS)/ada_source_path + $(VERBOSE)echo $(ADA_RUNTIME_DIR) >> $(ADA_RTS)/ada_source_path + +ada_object_path: + $(VERBOSE)mkdir -p $(ADA_RTS) + $(VERBOSE)echo $(ADA_RTS) > $(ADA_RTS)/ada_object_path diff --git a/lib/mk/ada.mk b/lib/mk/ada.mk new file mode 100644 index 0000000..2d40a2b --- /dev/null +++ b/lib/mk/ada.mk @@ -0,0 +1,93 @@ +include $(REP_DIR)/lib/mk/ada.inc + +ADALIB = $(ADA_RTS)/adalib +ADAINCLUDE = $(ADA_RTS)/adainclude + +SRC_C += \ + init.c \ + exit.c \ + argv.c \ + posix_common.c \ + posix_fat.c + +SRC_ADS += system.ads \ + s-soflin.ads \ + s-imgint.ads \ + s-stoele.ads \ + s-secsta.ads \ + interfac.ads \ + a-uncdea.ads \ + a-ioexce.ads \ + interfac.ads \ + s-crtl.ads \ + s-stalib.ads \ + gnat.ads \ + ada.ads \ + g-souinf.ads \ + g-trasym.ads \ + s-unstyp.ads + +SRC_ADB += g-io.adb \ + a-except.adb \ + a-tags.adb \ + a-finali.adb \ + s-htable.adb \ + s-wchcon.adb \ + s-wchstw.adb \ + s-valllu.adb \ + s-strhas.adb \ + s-valuti.adb \ + s-wchcnv.adb \ + s-wchjis.adb \ + s-casuti.adb \ + s-exctab.adb \ + s-finmas.adb \ + s-addima.adb \ + s-io.adb \ + s-finroo.adb \ + s-stopoo.adb \ + s-imgboo.adb \ + s-pooglo.adb \ + s-stratt.adb \ + i-c.adb \ + s-memory.adb \ + a-stream.adb \ + s-parame.adb \ + a-elchha.adb \ + s-stache.adb \ + s-excdeb.adb \ + s-traent.adb \ + s-traceb.adb \ + g-traceb.adb \ + a-exctra.adb \ + s-trasym.adb \ + s-except.adb \ + a-comlin.adb \ + s-init.adb + +# Ada packages that implement runtime functionality +SRC_ADB += \ + ss_utils.adb \ + string_utils.adb \ + platform.adb + +vpath platform.% $(ADA_RUNTIME_LIB_DIR) +vpath string_utils.% $(ADA_RUNTIME_LIB_DIR) +vpath ss_utils.% $(ADA_RUNTIME_LIB_DIR) +vpath init.c $(ADA_RUNTIME_LIB_DIR) +vpath exit.c $(ADA_RUNTIME_LIB_DIR) +vpath argv.c $(ADA_RUNTIME_LIB_DIR) +vpath s-init.adb $(ADA_RUNTIME_COMMON_DIR) +vpath platform.% $(ADA_RUNTIME_LIB_DIR) +vpath string_utils.% $(ADA_RUNTIME_LIB_DIR) +vpath ss_utils.% $(ADA_RUNTIME_LIB_DIR) +vpath a-except.adb $(ADA_RUNTIME_DIR) + +vpath %.c $(ADA_RUNTIME_PLATFORM_DIR) +vpath %.ads $(ADA_RTS_SOURCE) +vpath %.adb $(ADA_RTS_SOURCE) + +SHARED_LIB = yes +LIBS += libc +CUSTOM_ADA_FLAGS = --RTS=$(ADA_RTS) -c -gnatg -gnatp -gnatpg -gnatn2 + diff --git a/lib/symbols/ada b/lib/symbols/ada new file mode 100644 index 0000000..9c8d942 --- /dev/null +++ b/lib/symbols/ada @@ -0,0 +1,928 @@ +__gl_default_stack_size D 4 +__gl_detect_blocking B 4 +__gl_interrupt_states B 8 +__gl_leap_seconds_support B 4 +__gl_locking_policy D 1 +__gl_main_cpu D 4 +__gl_main_priority D 4 +__gl_num_interrupt_states B 4 +__gl_num_specific_dispatching B 4 +__gl_priority_specific_dispatching B 8 +__gl_queuing_policy D 1 +__gl_task_dispatching_policy D 1 +__gl_time_slice_val D 4 +__gl_unreserve_all_interrupts B 4 +__gl_wc_encoding D 1 +__gnat_append_info_e_msg T +__gnat_append_info_u_e_info T +__gnat_binder_ss_count B 4 +__gnat_break_start T +__gnat_debug_raise_assert_failure T +__gnat_debug_raise_exception T +__gnat_default_ss_pool B 4 +__gnat_default_ss_size B 4 +__gnat_exception_actions_global_action D 8 +__gnat_exception_actions_initialized D 1 +__gnat_exception_msg_len T +__gnat_finalize_library_objects D 8 +__gnat_finalize T +__gnat_free T +__gnat_initialize T +__gnat_last_chance_handler T +__gnat_malloc T +__gnat_notify_handled_exception T +__gnat_notify_unhandled_exception T +__gnat_raise_constraint_error T +__gnat_raise_constraint_error_msg T +__gnat_raise_exception T +__gnat_raise_from_controlled_operation T +__gnat_raise_nodefer_with_msg T +__gnat_raise_program_error T +__gnat_raise_program_error_msg T +__gnat_raise_storage_error T +__gnat_raise_storage_error_msg T +__gnat_raise_with_msg T +__gnat_rcheck_00 T +__gnat_rcheck_01 T +__gnat_rcheck_02 T +__gnat_rcheck_03 T +__gnat_rcheck_04 T +__gnat_rcheck_05 T +__gnat_rcheck_06 T +__gnat_rcheck_07 T +__gnat_rcheck_08 T +__gnat_rcheck_09 T +__gnat_rcheck_10 T +__gnat_rcheck_11 T +__gnat_rcheck_12 T +__gnat_rcheck_13 T +__gnat_rcheck_14 T +__gnat_rcheck_15 T +__gnat_rcheck_16 T +__gnat_rcheck_17 T +__gnat_rcheck_18 T +__gnat_rcheck_19 T +__gnat_rcheck_20 T +__gnat_rcheck_21 T +__gnat_rcheck_22 T +__gnat_rcheck_23 T +__gnat_rcheck_24 T +__gnat_rcheck_25 T +__gnat_rcheck_26 T +__gnat_rcheck_27 T +__gnat_rcheck_28 T +__gnat_rcheck_29 T +__gnat_rcheck_30 T +__gnat_rcheck_31 T +__gnat_rcheck_32 T +__gnat_rcheck_33 T +__gnat_rcheck_34 T +__gnat_rcheck_35 T +__gnat_rcheck_36 T +__gnat_rcheck_CE_Access_Check T +__gnat_rcheck_CE_Discriminant_Check T +__gnat_rcheck_CE_Divide_By_Zero T +__gnat_rcheck_CE_Explicit_Raise T +__gnat_rcheck_CE_Index_Check T +__gnat_rcheck_CE_Invalid_Data T +__gnat_rcheck_CE_Length_Check T +__gnat_rcheck_CE_Null_Access_Parameter T +__gnat_rcheck_CE_Null_Exception_Id T +__gnat_rcheck_CE_Null_Not_Allowed T +__gnat_rcheck_CE_Overflow_Check T +__gnat_rcheck_CE_Partition_Check T +__gnat_rcheck_CE_Range_Check T +__gnat_rcheck_CE_Tag_Check T +__gnat_rcheck_PE_Access_Before_Elaboration T +__gnat_rcheck_PE_Accessibility_Check T +__gnat_rcheck_PE_Address_Of_Intrinsic T +__gnat_rcheck_PE_Aliased_Parameters T +__gnat_rcheck_PE_All_Guards_Closed T +__gnat_rcheck_PE_Bad_Predicated_Generic_Type T +__gnat_rcheck_PE_Current_Task_In_Entry_Body T +__gnat_rcheck_PE_Duplicated_Entry_Address T +__gnat_rcheck_PE_Explicit_Raise T +__gnat_rcheck_PE_Finalize_Raised_Exception T +__gnat_rcheck_PE_Implicit_Return T +__gnat_rcheck_PE_Misaligned_Address_Value T +__gnat_rcheck_PE_Missing_Return T +__gnat_rcheck_PE_Non_Transportable_Actual T +__gnat_rcheck_PE_Overlaid_Controlled_Object T +__gnat_rcheck_PE_Potentially_Blocking_Operation T +__gnat_rcheck_PE_Stream_Operation_Not_Allowed T +__gnat_rcheck_PE_Stubbed_Subprogram_Called T +__gnat_rcheck_PE_Unchecked_Union_Restriction T +__gnat_rcheck_SE_Empty_Storage_Pool T +__gnat_rcheck_SE_Explicit_Raise T +__gnat_rcheck_SE_Infinite_Recursion T +__gnat_rcheck_SE_Object_Too_Large T +__gnat_realloc T +__gnat_reraise T +__gnat_reraise_library_exception_if_any T +__gnat_set_exit_status T +__gnat_stack_limit B 8 +__gnat_to_stderr T +__gnat_to_stderr_char T +__gnat_transfer_occurrence T +__gnat_unhandled_exception T +__gnat_unhandled_terminate T +_abort_signal D 40 +_ada_system__address_image T +ada_E D 2 +ada__exceptions_E D 2 +ada__exceptions__counter R 4 +ada__exceptions__eid_to_string T +ada__exceptions__eo_to_string T +ada__exceptions__exception_data__append_info_addressXn T +ada__exceptions__exception_data__append_info_basic_exception_informationXn T +ada__exceptions__exception_data__append_info_characterXn T +ada__exceptions__exception_data__append_info_exception_nameXn T +ada__exceptions__exception_data__append_info_exception_name__2Xn T +ada__exceptions__exception_data__append_info_natXn T +ada__exceptions__exception_data__append_info_nlXn T +ada__exceptions__exception_data__append_info_stringXn T +ada__exceptions__exception_data__append_info_untailored_exception_tracebackXn T +ada__exceptions__exception_data__basic_exception_info_maxlengthXn T +ada__exceptions__exception_data__bei_msg_headerXn R 4 +ada__exceptions__exception_data__bei_name_headerXn R 8 +ada__exceptions__exception_data__bei_pid_headerXn R 8 +ada__exceptions__exception_data__betb_headerXn R 31 +ada__exceptions__exception_data__exception_info_maxlengthXn T +ada__exceptions__exception_data__exception_informationXn T +ada__exceptions__exception_data__exception_name_lengthXn T +ada__exceptions__exception_data__exception_name_length__2Xn T +ada__exceptions__exception_data__ldad_headerXn R 16 +ada__exceptions__exception_data__set_exception_c_msgXn T +ada__exceptions__exception_data__set_exception_msgXn T +ada__exceptions__exception_data__tailored_exception_tracebackXn T +ada__exceptions__exception_data__untailored_exception_informationXn T +ada__exceptions__exception_data__untailored_exception_tracebackXn T +ada__exceptions__exception_data__untailored_exception_traceback_maxlengthXn T +ada__exceptions__exception_identity T +ada__exceptions__exception_information T +ada__exceptions__exception_message T +ada__exceptions__exception_name T +ada__exceptions__exception_name__2 T +ada__exceptions__exception_name_simple T +ada__exceptions__exception_occurrenceIP T +ada__exceptions__exception_traces__nlineXn R 1 +ada__exceptions__exception_traces__notify_exceptionXn T +ada__exceptions__exception_traces__unhandled_exception_terminateXn T +ada__exceptions__last_chance_handler_E D 2 +ada__exceptions__null_id R 8 +ada__exceptions__null_loc R 8 +ada__exceptions__null_occurrence R 632 +ada__exceptions__poll T +ada__exceptions__process_raise_exception T +ada__exceptions__raise_exception T +ada__exceptions__raise_exception_no_defer T +ada__exceptions__raise_from_signal_handler T +ada__exceptions__raise_with_location_and_msg T +ada__exceptions__reraise_occurrence T +ada__exceptions__reraise_occurrence_always T +ada__exceptions__reraise_occurrence_no_defer T +ada__exceptions__rmsg_00 R 20 +ada__exceptions__rmsg_01 R 25 +ada__exceptions__rmsg_02 R 26 +ada__exceptions__rmsg_03 R 16 +ada__exceptions__rmsg_04 R 16 +ada__exceptions__rmsg_05 R 19 +ada__exceptions__rmsg_06 R 16 +ada__exceptions__rmsg_07 R 20 +ada__exceptions__rmsg_08 R 18 +ada__exceptions__rmsg_09 R 28 +ada__exceptions__rmsg_10 R 22 +ada__exceptions__rmsg_11 R 23 +ada__exceptions__rmsg_12 R 19 +ada__exceptions__rmsg_13 R 17 +ada__exceptions__rmsg_14 R 26 +ada__exceptions__rmsg_15 R 27 +ada__exceptions__rmsg_16 R 48 +ada__exceptions__rmsg_17 R 19 +ada__exceptions__rmsg_18 R 18 +ada__exceptions__rmsg_19 R 47 +ada__exceptions__rmsg_20 R 38 +ada__exceptions__rmsg_21 R 25 +ada__exceptions__rmsg_22 R 16 +ada__exceptions__rmsg_23 R 33 +ada__exceptions__rmsg_24 R 31 +ada__exceptions__rmsg_25 R 25 +ada__exceptions__rmsg_26 R 16 +ada__exceptions__rmsg_27 R 27 +ada__exceptions__rmsg_28 R 31 +ada__exceptions__rmsg_29 R 26 +ada__exceptions__rmsg_30 R 28 +ada__exceptions__rmsg_31 R 51 +ada__exceptions__rmsg_32 R 19 +ada__exceptions__rmsg_33 R 16 +ada__exceptions__rmsg_34 R 19 +ada__exceptions__rmsg_35 R 17 +ada__exceptions__rmsg_36 R 29 +ada__exceptions__save_occurrence T +ada__exceptions__save_occurrence__2 T +ada__exceptions__stream_attributes__eid_to_stringXn T +ada__exceptions__stream_attributes__eo_to_stringXn T +ada__exceptions__stream_attributes__string_to_eidXn T +ada__exceptions__stream_attributes__string_to_eoXn T +ada__exceptions__string_to_eid T +ada__exceptions__string_to_eo T +ada__exceptions__triggered_by_abort T +ada__finalization_E D 2 +ada__finalization__Oeq__3 T +ada__finalization__TcontrolledCFD T +ada__finalization__Tlimited_controlledCFD T +ada__finalization___assign__3 T +ada__finalization___elabs T +ada__finalization___size__3 T +ada__finalization___size__4 T +ada__finalization__adjust T +ada__finalization__controlledB46s D 88 +ada__finalization__controlledDA__2 T +ada__finalization__controlledDF__2 T +ada__finalization__controlledE42s R 28 +ada__finalization__controlledFD T +ada__finalization__controlledH43s D 8 +ada__finalization__controlledIP T +ada__finalization__controlledP D 8 +ada__finalization__controlledR44s D 8 +ada__finalization__controlledR44s___UNC D 80 +ada__finalization__controlledSO__2 T +ada__finalization__controlledSR__2 T +ada__finalization__controlledSW__2 T +ada__finalization__controlledT D 56 +ada__finalization__controlledY D 8 +ada__finalization__finalize T +ada__finalization__finalize__2 T +ada__finalization__initialize T +ada__finalization__initialize__2 T +ada__finalization__limited_controlledB79s D 88 +ada__finalization__limited_controlledDF__2 T +ada__finalization__limited_controlledE75s R 36 +ada__finalization__limited_controlledFD T +ada__finalization__limited_controlledH76s D 8 +ada__finalization__limited_controlledIP T +ada__finalization__limited_controlledP D 8 +ada__finalization__limited_controlledR77s D 8 +ada__finalization__limited_controlledR77s___UNC D 80 +ada__finalization__limited_controlledT D 56 +ada__finalization__limited_controlledY D 8 +ada__io_exceptions_E D 2 +ada__io_exceptions__R11s D 8 +ada__io_exceptions__R14s D 8 +ada__io_exceptions__R17s D 8 +ada__io_exceptions__R20s D 8 +ada__io_exceptions__R23s D 8 +ada__io_exceptions__R2s D 8 +ada__io_exceptions__R5s D 8 +ada__io_exceptions__R8s D 8 +ada__io_exceptions___elabs T +ada__io_exceptions__data_error D 40 +ada__io_exceptions__data_errorE R 29 +ada__io_exceptions__device_error D 40 +ada__io_exceptions__device_errorE R 31 +ada__io_exceptions__end_error D 40 +ada__io_exceptions__end_errorE R 28 +ada__io_exceptions__layout_error D 40 +ada__io_exceptions__layout_errorE R 31 +ada__io_exceptions__mode_error D 40 +ada__io_exceptions__mode_errorE R 29 +ada__io_exceptions__name_error D 40 +ada__io_exceptions__name_errorE R 29 +ada__io_exceptions__status_error D 40 +ada__io_exceptions__status_errorE R 31 +ada__io_exceptions__use_error D 40 +ada__io_exceptions__use_errorE R 28 +ada__streams_E D 2 +ada__streams__Troot_stream_typeCFD T +ada__streams___elabs T +ada__streams___size T +ada__streams__read_sea T +ada__streams__root_stream_typeB32s D 80 +ada__streams__root_stream_typeDF T +ada__streams__root_stream_typeE28s R 29 +ada__streams__root_stream_typeH29s D 8 +ada__streams__root_stream_typeIP T +ada__streams__root_stream_typeP D 8 +ada__streams__root_stream_typeR30s D 8 +ada__streams__root_stream_typeR30s___UNC D 80 +ada__streams__root_stream_typeT D 48 +ada__streams__root_stream_typeY D 8 +ada__streams__stream_element_arrayIP T +ada__streams__stream_element_arraySR T +ada__streams__stream_element_arraySW T +ada__streams__write_sea T +ada__tags_E D 2 +ada__tags__R4s D 8 +ada__tags___elabb T +ada__tags___elabs T +ada__tags__address_arrayIP T +ada__tags__base_address T +ada__tags__check_tsd T +ada__tags__cw_membership T +ada__tags__descendant_tag T +ada__tags__dispatch_table_wrapperIP T +ada__tags__displace T +ada__tags__dt T +ada__tags__dt_offset_to_top_offset R 8 +ada__tags__dt_offset_to_top_size R 8 +ada__tags__dt_predef_prims_offset R 8 +ada__tags__dt_predef_prims_size R 8 +ada__tags__dt_typeinfo_ptr_size R 8 +ada__tags__expanded_name T +ada__tags__external_tag T +ada__tags__external_tag_htable__TtableBIPXn T +ada__tags__external_tag_htable__getXn T +ada__tags__external_tag_htable__get_firstXn T +ada__tags__external_tag_htable__get_nextXn T +ada__tags__external_tag_htable__get_non_nullXn T +ada__tags__external_tag_htable__iterator_indexXn B 1 +ada__tags__external_tag_htable__iterator_ptrXn D 8 +ada__tags__external_tag_htable__iterator_startedXn D 1 +ada__tags__external_tag_htable__null_ptrXn R 8 +ada__tags__external_tag_htable__presentXn T +ada__tags__external_tag_htable__removeXn T +ada__tags__external_tag_htable__resetXn T +ada__tags__external_tag_htable__setXn T +ada__tags__external_tag_htable__set_if_not_presentXn T +ada__tags__external_tag_htable__tableXn B 512 +ada__tags__get_entry_index T +ada__tags__get_external_tag T +ada__tags__get_offset_index T +ada__tags__get_prim_op_kind T +ada__tags__get_tagged_kind T +ada__tags__htable_subprograms__equalXn T +ada__tags__htable_subprograms__get_ht_linkXn T +ada__tags__htable_subprograms__hashXn T +ada__tags__htable_subprograms__set_ht_linkXn T +ada__tags__interface_ancestor_tags T +ada__tags__interface_dataIP T +ada__tags__interface_data_elementIP T +ada__tags__interfaces_arrayIP T +ada__tags__internal_tag T +ada__tags__is_descendant_at_same_level T +ada__tags__is_primary_dt T +ada__tags__iw_membership T +ada__tags__length T +ada__tags__max_predef_prims R 4 +ada__tags__needs_finalization T +ada__tags__no_dispatch_table_wrapperIP T +ada__tags__no_tag R 8 +ada__tags__object_specific_dataIP T +ada__tags__object_specific_data_arrayIP T +ada__tags__offset_to_top T +ada__tags__osd T +ada__tags__parent_size T +ada__tags__parent_tag T +ada__tags__prim_op_kindN R 18 +ada__tags__prim_op_kindS R 138 +ada__tags__register_interface_offset T +ada__tags__register_tag T +ada__tags__secondary_tag T +ada__tags__select_specific_dataIP T +ada__tags__select_specific_data_arrayIP T +ada__tags__select_specific_data_elementIP T +ada__tags__set_dynamic_offset_to_top T +ada__tags__set_entry_index T +ada__tags__set_prim_op_kind T +ada__tags__signature_kindN R 4 +ada__tags__signature_kindS R 29 +ada__tags__ssd T +ada__tags__tag_arrayIP T +ada__tags__tag_error D 40 +ada__tags__tag_errorE R 19 +ada__tags__tag_tableIP T +ada__tags__tagged_kindN R 8 +ada__tags__tagged_kindS R 89 +ada__tags__type_is_abstract T +ada__tags__type_specific_dataIP T +ada__tags__unregister_tag T +ada__tags__wide_expanded_name T +ada__tags__wide_wide_expanded_name T +ada__unchecked_deallocation_E D 2 +allocate_secondary_stack T +constraint_error D 40 +get_thread T +gnat_argc B 4 +gnat_argv B 8 +gnat_envp B 8 +gnat_exit_status T +gnat_E D 2 +gnat__io_E D 2 +gnat__io__current_out D 1 +gnat__io__file_typeN R 4 +gnat__io__file_typeS R 16 +gnat__io__get T +gnat__io__get__2 T +gnat__io__get_line T +gnat__io__new_line T +gnat__io__new_line__2 T +gnat__io__put T +gnat__io__put__2 T +gnat__io__put__3 T +gnat__io__put__4 T +gnat__io__put__5 T +gnat__io__put__6 T +gnat__io__put_line T +gnat__io__put_line__2 T +gnat__io__set_output T +gnat__io__standard_error T +gnat__io__standard_output T +gnat__source_info_E D 2 +interfaces_E D 2 +interfaces__c_E D 2 +interfaces__c__R6s D 8 +interfaces__c___elabs T +interfaces__c__char16_arrayIP T +interfaces__c__char16_nul R 2 +interfaces__c__char32_arrayIP T +interfaces__c__char32_nul R 4 +interfaces__c__char_arrayIP T +interfaces__c__is_nul_terminated T +interfaces__c__is_nul_terminated__2 T +interfaces__c__is_nul_terminated__3 T +interfaces__c__is_nul_terminated__4 T +interfaces__c__nul R 1 +interfaces__c__terminator_error D 40 +interfaces__c__terminator_errorE R 30 +interfaces__c__to_ada T +interfaces__c__to_ada__10 T +interfaces__c__to_ada__11 T +interfaces__c__to_ada__12 T +interfaces__c__to_ada__2 T +interfaces__c__to_ada__3 T +interfaces__c__to_ada__4 T +interfaces__c__to_ada__5 T +interfaces__c__to_ada__6 T +interfaces__c__to_ada__7 T +interfaces__c__to_ada__8 T +interfaces__c__to_ada__9 T +interfaces__c__to_c T +interfaces__c__to_c__10 T +interfaces__c__to_c__11 T +interfaces__c__to_c__12 T +interfaces__c__to_c__2 T +interfaces__c__to_c__3 T +interfaces__c__to_c__4 T +interfaces__c__to_c__5 T +interfaces__c__to_c__6 T +interfaces__c__to_c__7 T +interfaces__c__to_c__8 T +interfaces__c__to_c__9 T +interfaces__c__wchar_arrayIP T +interfaces__c__wide_nul R 4 +local_raise T +log_debug T +log_error T +log_warning T +numeric_error D 40 +platform_E D 2 +platform__log_debug T +platform__log_debug_private T +platform__log_error T +platform__log_error_private T +platform__log_warning T +platform__log_warning_private T +platform__raise_ada_exception T +program_error D 40 +put_char T +put_char_stderr T +put_int T +put_int_stderr T +raise_ada_exception T +ss_utils_E D 2 +ss_utils__TregistryBIP T +ss_utils___elabs T +ss_utils__allocate_stack T +ss_utils__c_alloc T +ss_utils__get_mark T +ss_utils__invalid_thread R 8 +ss_utils__markIP T +ss_utils__null_registry B 3072 +ss_utils__registry_entryIP T +ss_utils__s_allocate T +ss_utils__s_mark T +ss_utils__s_release T +ss_utils__secondary_stack_size R 8 +ss_utils__set_mark T +storage_error D 40 +string_utils_E D 2 +string_utils__convert_to_ada T +string_utils__get_char T +string_utils__incr T +string_utils__length T +string_utils__null_pointer R 8 +string_utils__to_address T +string_utils__to_pointer T +system__aamp R 1 +system__address_image_E D 2 +system__always_compatible_rep R 1 +system__backend_divide_checks R 1 +system__backend_overflow_checks R 1 +system__bit_orderN R 4 +system__bit_orderS R 31 +system__case_util_E D 2 +system__case_util__to_lower T +system__case_util__to_lower__2 T +system__case_util__to_mixed T +system__case_util__to_upper T +system__case_util__to_upper__2 T +system__command_line_args R 1 +system__configurable_run_time R 1 +system__crtl_E D 2 +system__crtl__filename_encodingN R 4 +system__crtl__filename_encodingS R 26 +system__default_bit_order R 1 +system__default_priority R 4 +system__denorm R 1 +system__duration_32_bits R 1 +system__exception_table_E D 2 +system__exception_table__ThtableBIP T +system__exception_table___elabb T +system__exception_table__exception_data_arrayIP T +system__exception_table__get_registered_exceptions T +system__exception_table__has_name T +system__exception_table__hash T +system__exception_table__htable B 296 +system__exception_table__internal_exception T +system__exception_table__lookup T +system__exception_table__register T +system__exception_table__register_exception T +system__exception_table__registered_exceptions_count T +system__exceptions_debug_E D 2 +system__exceptions_E D 2 +system__exceptions___elabs T +system__exit_status_supported R 1 +system__finalization_masters_E D 2 +system__finalization_masters__Tfinalization_masterCFD T +system__finalization_masters___elabb T +system__finalization_masters___elabs T +system__finalization_masters___master B 4 +system__finalization_masters___size__2 T +system__finalization_masters__add_offset_to_address T +system__finalization_masters__attach T +system__finalization_masters__attach_unprotected T +system__finalization_masters__base_pool T +system__finalization_masters__delete_finalize_address_unprotected T +system__finalization_masters__detach T +system__finalization_masters__detach_unprotected T +system__finalization_masters__finalization_masterB28s D 96 +system__finalization_masters__finalization_masterDF__2 T +system__finalization_masters__finalization_masterE24s R 48 +system__finalization_masters__finalization_masterFD T +system__finalization_masters__finalization_masterH25s D 8 +system__finalization_masters__finalization_masterIP T +system__finalization_masters__finalization_masterP D 8 +system__finalization_masters__finalization_masterR26s D 8 +system__finalization_masters__finalization_masterR26s___UNC D 80 +system__finalization_masters__finalization_masterT D 136 +system__finalization_masters__finalization_masterY D 8 +system__finalization_masters__finalization_started T +system__finalization_masters__finalize T +system__finalization_masters__finalize_address T +system__finalization_masters__finalize_address_table__element_wrapperIPXn T +system__finalization_masters__finalize_address_table__getXn T +system__finalization_masters__finalize_address_table__get_firstXn T +system__finalization_masters__finalize_address_table__get_first__2Xn T +system__finalization_masters__finalize_address_table__get_keyXn T +system__finalization_masters__finalize_address_table__get_nextXn T +system__finalization_masters__finalize_address_table__get_next__2Xn T +system__finalization_masters__finalize_address_table__nextXn T +system__finalization_masters__finalize_address_table__no_elementXn R 8 +system__finalization_masters__finalize_address_table__removeXn T +system__finalization_masters__finalize_address_table__resetXn T +system__finalization_masters__finalize_address_table__setXn T +system__finalization_masters__finalize_address_table__set_nextXn T +system__finalization_masters__finalize_address_table__tab__TtableBIPXnb T +system__finalization_masters__finalize_address_table__tab__getXnb T +system__finalization_masters__finalize_address_table__tab__get_firstXnb T +system__finalization_masters__finalize_address_table__tab__get_nextXnb T +system__finalization_masters__finalize_address_table__tab__get_non_nullXnb T +system__finalization_masters__finalize_address_table__tab__iterator_indexXnb B 1 +system__finalization_masters__finalize_address_table__tab__iterator_ptrXnb D 8 +system__finalization_masters__finalize_address_table__tab__iterator_startedXnb D 1 +system__finalization_masters__finalize_address_table__tab__null_ptrXnb R 8 +system__finalization_masters__finalize_address_table__tab__presentXnb T +system__finalization_masters__finalize_address_table__tab__removeXnb T +system__finalization_masters__finalize_address_table__tab__resetXnb T +system__finalization_masters__finalize_address_table__tab__setXnb T +system__finalization_masters__finalize_address_table__tab__set_if_not_presentXnb T +system__finalization_masters__finalize_address_table__tab__tableXnb B 1024 +system__finalization_masters__finalize_address_unprotected T +system__finalization_masters__finalize_spec T +system__finalization_masters__fm_nodeIP T +system__finalization_masters__header_size T +system__finalization_masters__initialize__2 T +system__finalization_masters__is_homogeneous T +system__finalization_masters__objects T +system__finalization_masters__print_master T +system__finalization_masters__set_base_pool T +system__finalization_masters__set_finalize_address T +system__finalization_masters__set_finalize_address_unprotected T +system__finalization_masters__set_heterogeneous_finalize_address_unprotected T +system__finalization_masters__set_is_heterogeneous T +system__finalization_root_E D 2 +system__finalization_root__Oeq T +system__finalization_root__Troot_controlledCFD T +system__finalization_root___assign T +system__finalization_root___elabs T +system__finalization_root___size T +system__finalization_root__adjust T +system__finalization_root__finalize T +system__finalization_root__initialize T +system__finalization_root__root_controlledB29s D 80 +system__finalization_root__root_controlledDA T +system__finalization_root__root_controlledDF T +system__finalization_root__root_controlledE25s R 41 +system__finalization_root__root_controlledH26s D 8 +system__finalization_root__root_controlledIP T +system__finalization_root__root_controlledP D 8 +system__finalization_root__root_controlledR27s D 8 +system__finalization_root__root_controlledR27s___UNC D 80 +system__finalization_root__root_controlledSO T +system__finalization_root__root_controlledSR T +system__finalization_root__root_controlledSW T +system__finalization_root__root_controlledT D 56 +system__finalization_root__root_controlledY D 8 +system__fractional_fixed_ops R 1 +system__front_end_zcx_support R 1 +system__frontend_exceptions R 1 +system__frontend_layout R 1 +system__functions_return_by_dsp R 1 +system__gcc_zcx_support R 1 +system__high_integrity_mode R 1 +system__htable_E D 2 +system__img_bool_E D 2 +system__img_bool__image_boolean T +system__img_int_E D 2 +system__img_int__image_integer T +system__img_int__set_image_integer T +system__io_E D 2 +system__io__current_out D 1 +system__io__file_typeN R 4 +system__io__file_typeS R 16 +system__io__new_line T +system__io__put T +system__io__put__2 T +system__io__put__3 T +system__io__put_line T +system__io__set_output T +system__io__standard_error T +system__io__standard_output T +system__long_shifts_inlined R 1 +system__machine_overflows R 1 +system__machine_rounds R 1 +system__max_interrupt_priority R 4 +system__max_priority R 4 +system__memory_E D 2 +system__nameN R 2 +system__nameS R 16 +system__null_address R 8 +system__parameters_E D 2 +system__parameters__adjust_storage_size T +system__parameters__c_malloc_linkname R 16 +system__parameters__default_env_stack_size R 4 +system__parameters__default_stack_size T +system__parameters__dynamic R 4 +system__parameters__garbage_collected R 1 +system__parameters__minimum_stack_size T +system__parameters__no_abort R 1 +system__parameters__runtime_traces R 1 +system__parameters__sec_stack_dynamic R 1 +system__parameters__sec_stack_percentage R 4 +system__parameters__single_lock R 1 +system__parameters__stack_grows_down R 1 +system__parameters__unspecified_size R 4 +system__pool_global_E D 2 +system__pool_global__C59s D 4 +system__pool_global__Tunbounded_no_reclaim_poolCFD T +system__pool_global___elabs T +system__pool_global___size T +system__pool_global__allocate T +system__pool_global__deallocate T +system__pool_global__finalize_spec T +system__pool_global__global_pool_object B 8 +system__pool_global__storage_size T +system__pool_global__unbounded_no_reclaim_poolB20s D 104 +system__pool_global__unbounded_no_reclaim_poolDF T +system__pool_global__unbounded_no_reclaim_poolE16s R 45 +system__pool_global__unbounded_no_reclaim_poolFD T +system__pool_global__unbounded_no_reclaim_poolH17s D 8 +system__pool_global__unbounded_no_reclaim_poolIP T +system__pool_global__unbounded_no_reclaim_poolP D 8 +system__pool_global__unbounded_no_reclaim_poolR18s D 8 +system__pool_global__unbounded_no_reclaim_poolR18s___UNC D 80 +system__pool_global__unbounded_no_reclaim_poolT D 80 +system__pool_global__unbounded_no_reclaim_poolY D 8 +system__preallocated_stacks R 1 +system__secondary_stack_E D 2 +system__secondary_stack___elabb T +system__secondary_stack__chunk_idIP T +system__secondary_stack__default_secondary_stack_size D 4 +system__secondary_stack__dummy_fixed_stack B 48 +system__secondary_stack__fixed_stack_idIP T +system__secondary_stack__mark_idIP T +system__secondary_stack__memoryIP T +system__secondary_stack__ss_allocate T +system__secondary_stack__ss_free T +system__secondary_stack__ss_get_max T +system__secondary_stack__ss_init T +system__secondary_stack__ss_mark T +system__secondary_stack__ss_pool B 4 +system__secondary_stack__ss_ratio_dynamic R 1 +system__secondary_stack__ss_release T +system__secondary_stack__stack_idIP T +system__signed_zeros R 1 +system__soft_links_E D 2 +system__soft_links___elabb T +system__soft_links___elabs T +system__soft_links__abort_defer D 8 +system__soft_links__abort_defer_nt T +system__soft_links__abort_handler D 8 +system__soft_links__abort_handler_nt T +system__soft_links__abort_undefer D 8 +system__soft_links__abort_undefer_nt T +system__soft_links__adafinal D 8 +system__soft_links__adafinal_nt T +system__soft_links__check_abort_status D 8 +system__soft_links__check_abort_status_nt T +system__soft_links__complete_master D 8 +system__soft_links__complete_master_nt T +system__soft_links__create_tsd T +system__soft_links__current_master D 8 +system__soft_links__current_master_nt T +system__soft_links__destroy_tsd T +system__soft_links__dummy_communication_blockIP T +system__soft_links__enter_master D 8 +system__soft_links__enter_master_nt T +system__soft_links__get_current_excep D 8 +system__soft_links__get_current_excep_nt T +system__soft_links__get_gnat_exception T +system__soft_links__get_jmpbuf_address D 8 +system__soft_links__get_jmpbuf_address_nt T +system__soft_links__get_jmpbuf_address_soft T +system__soft_links__get_sec_stack_addr D 8 +system__soft_links__get_sec_stack_addr_nt T +system__soft_links__get_sec_stack_addr_soft T +system__soft_links__get_stack_info D 8 +system__soft_links__get_stack_info_nt T +system__soft_links__library_exception B 632 +system__soft_links__library_exception_set D 1 +system__soft_links__lock_task D 8 +system__soft_links__nt_tsd B 672 +system__soft_links__save_library_occurrence T +system__soft_links__set_jmpbuf_address D 8 +system__soft_links__set_jmpbuf_address_nt T +system__soft_links__set_jmpbuf_address_soft T +system__soft_links__set_sec_stack_addr D 8 +system__soft_links__set_sec_stack_addr_nt T +system__soft_links__set_sec_stack_addr_soft T +system__soft_links__task_lock_nt T +system__soft_links__task_name D 8 +system__soft_links__task_name_nt T +system__soft_links__task_termination_handler D 8 +system__soft_links__task_termination_nt T +system__soft_links__task_unlock_nt T +system__soft_links__timed_delay D 8 +system__soft_links__traceback_decorator_wrapper D 8 +system__soft_links__tsdIP T +system__soft_links__unlock_task D 8 +system__stack_check_default R 1 +system__stack_check_limits R 1 +system__stack_check_probes R 1 +system__stack_checking_E D 2 +system__stack_checking__multi_processor R 1 +system__stack_checking__null_stack D 8 +system__stack_checking__null_stack_info D 24 +system__stack_checking__stack_infoIP T +system__standard_library_E D 2 +system__standard_library__abort_signal_name R 16 +system__standard_library__abort_undefer_direct T +system__standard_library__adafinal T +system__standard_library__constraint_error_name R 17 +system__standard_library__exception_dataIP T +system__standard_library__exception_trace D 1 +system__standard_library__exception_trace_kindN R 8 +system__standard_library__exception_trace_kindS R 62 +system__standard_library__local_partition_id D 4 +system__standard_library__numeric_error_name R 16 +system__standard_library__program_error_name R 16 +system__standard_library__runtime_finalized D 1 +system__standard_library__storage_error_name R 16 +system__standard_library__tasking_error_name R 16 +system__storage_elements_E D 2 +system__storage_elements__storage_arrayIP T +system__storage_pools_E D 2 +system__storage_pools__Troot_storage_poolCFD T +system__storage_pools___elabs T +system__storage_pools___master B 4 +system__storage_pools___size__2 T +system__storage_pools__allocate_any T +system__storage_pools__deallocate_any T +system__storage_pools__root_storage_poolB20s D 96 +system__storage_pools__root_storage_poolDF__2 T +system__storage_pools__root_storage_poolE16s R 39 +system__storage_pools__root_storage_poolFD T +system__storage_pools__root_storage_poolH17s D 8 +system__storage_pools__root_storage_poolIP T +system__storage_pools__root_storage_poolP D 8 +system__storage_pools__root_storage_poolR18s D 8 +system__storage_pools__root_storage_poolR18s___UNC D 80 +system__storage_pools__root_storage_poolT D 80 +system__storage_pools__root_storage_poolY D 8 +system__stream_attributes_E D 2 +system__stream_attributes__block_io_ok T +system__stream_attributes__err D 8 +system__stream_attributes__fat_pointerIP T +system__stream_attributes__i_ad T +system__stream_attributes__i_as T +system__stream_attributes__i_b T +system__stream_attributes__i_c T +system__stream_attributes__i_f T +system__stream_attributes__i_i T +system__stream_attributes__i_lf T +system__stream_attributes__i_li T +system__stream_attributes__i_llf T +system__stream_attributes__i_lli T +system__stream_attributes__i_llu T +system__stream_attributes__i_lu T +system__stream_attributes__i_sf T +system__stream_attributes__i_si T +system__stream_attributes__i_ssi T +system__stream_attributes__i_ssu T +system__stream_attributes__i_su T +system__stream_attributes__i_u T +system__stream_attributes__i_wc T +system__stream_attributes__i_wwc T +system__stream_attributes__thin_pointerIP T +system__stream_attributes__w_ad T +system__stream_attributes__w_as T +system__stream_attributes__w_b T +system__stream_attributes__w_c T +system__stream_attributes__w_f T +system__stream_attributes__w_i T +system__stream_attributes__w_lf T +system__stream_attributes__w_li T +system__stream_attributes__w_llf T +system__stream_attributes__w_lli T +system__stream_attributes__w_llu T +system__stream_attributes__w_lu T +system__stream_attributes__w_sf T +system__stream_attributes__w_si T +system__stream_attributes__w_ssi T +system__stream_attributes__w_ssu T +system__stream_attributes__w_su T +system__stream_attributes__w_u T +system__stream_attributes__w_wc T +system__stream_attributes__w_wwc T +system__string_hash_E D 2 +system__support_64_bit_divides R 1 +system__support_aggregates R 1 +system__support_composite_assign R 1 +system__support_composite_compare R 1 +system__support_long_shifts R 1 +system__suppress_standard_library R 1 +system__system_name R 1 +system__traceback_entries_E D 2 +system__traceback_entries__null_tb_entry R 8 +system__traceback_entries__pc_for T +system__traceback_entries__tb_entry_for T +system__traceback_entries__tracebacks_arrayIP T +system__unsigned_types_E D 2 +system__unsigned_types__packed_bytes1IP T +system__use_ada_main_program_name R 1 +system__val_llu_E D 2 +system__val_llu__scan_long_long_unsigned T +system__val_llu__scan_raw_long_long_unsigned T +system__val_llu__value_long_long_unsigned T +system__val_util_E D 2 +system__val_util__bad_value T +system__val_util__normalize_string T +system__val_util__scan_exponent T +system__val_util__scan_plus_sign T +system__val_util__scan_sign T +system__val_util__scan_trailing_blanks T +system__val_util__scan_underscore T +system__wch_cnv_E D 2 +system__wch_cnv__utf_32_stringIP T +system__wch_con_E D 2 +system__wch_con__get_wc_encoding_method T +system__wch_con__get_wc_encoding_method__2 T +system__wch_con__is_start_of_encoding T +system__wch_con__wc_encoding_letters R 8 +system__wch_con__wc_longest_sequences R 24 +system__wch_con__wcem_brackets R 1 +system__wch_con__wcem_euc R 1 +system__wch_con__wcem_hex R 1 +system__wch_con__wcem_shift_jis R 1 +system__wch_con__wcem_upper R 1 +system__wch_con__wcem_utf8 R 1 +system__wch_jis_E D 2 +system__wch_jis__euc_to_jis T +system__wch_jis__jis_to_euc T +system__wch_jis__jis_to_shift_jis T +system__wch_jis__shift_jis_to_jis T +system__wch_stw_E D 2 +system__wch_stw__string_to_wide_string T +system__wch_stw__string_to_wide_wide_string T +system__zcx_by_default R 1 +tasking_error D 40 diff --git a/run/test-ada.run b/run/test-ada.run new file mode 100644 index 0000000..3287f74 --- /dev/null +++ b/run/test-ada.run @@ -0,0 +1,59 @@ +set build_components { + core init + server/log_terminal + test/ada +} + +set config { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +} + +set boot_modules { + core init log_terminal + ld.lib.so libc.lib.so vfs.lib.so ada.lib.so + test-ada +} + +#source ${genode_dir}/repos/world/run/gdb.inc + +build $build_components +create_boot_directory +install_config $config + +#append_platform_drv_boot_modules +build_boot_image $boot_modules +append qemu_args " -nographic " + +run_genode_until "child \"test-ada\" exited with exit value 42" 20 diff --git a/src/test/ada/except.adb b/src/test/ada/except.adb new file mode 100644 index 0000000..ff4dada --- /dev/null +++ b/src/test/ada/except.adb @@ -0,0 +1,21 @@ +with GNAT.IO; use GNAT.IO; + +package body Except +is + procedure Do_Something + is + begin + raise Test_Exception; + end Do_Something; + + procedure Do_Sth_2 + is + begin + begin + Do_Something; + exception + when others => Put_Line ("Exception caught (inner)"); + end; + end Do_Sth_2; + +end Except; diff --git a/src/test/ada/except.ads b/src/test/ada/except.ads new file mode 100644 index 0000000..4c68cf4 --- /dev/null +++ b/src/test/ada/except.ads @@ -0,0 +1,8 @@ +package Except +is + Test_Exception : exception; + + procedure Do_Something; + procedure Do_Sth_2; + +end Except; diff --git a/src/test/ada/main.adb b/src/test/ada/main.adb new file mode 100644 index 0000000..0dd078d --- /dev/null +++ b/src/test/ada/main.adb @@ -0,0 +1,26 @@ +-- +-- \brief Simple ada test program +-- \author Alexander Senier +-- \date 2019-01-03 +-- + +with GNAT.IO; +with Except; +with Ada.Command_Line; + +procedure Main is + use GNAT.IO; +begin + declare + begin + Put_Line ("Hello World!"); + Except.Do_Sth_2; + Put_Line ("Bye World!"); + Except.Do_Something; + exception + when Except.Test_Exception => Put_Line ("Exception caught (outer)"); + end; + + Put_Line ("Program terminated"); + Ada.Command_Line.Set_Exit_Status (42); +end Main; diff --git a/src/test/ada/startup.cc b/src/test/ada/startup.cc new file mode 100644 index 0000000..417d3e2 --- /dev/null +++ b/src/test/ada/startup.cc @@ -0,0 +1,14 @@ +/* + * \brief Startup code for Ada main program + * \author Alexander Senier + * \date 2019-01-03 + */ + +#include + +extern "C" void _ada_main(void); + +void Ada::Component::main() +{ + _ada_main(); +} diff --git a/src/test/ada/target.mk b/src/test/ada/target.mk new file mode 100644 index 0000000..f6f9229 --- /dev/null +++ b/src/test/ada/target.mk @@ -0,0 +1,6 @@ +TARGET = test-ada +SRC_ADB = main.adb except.adb + +SRC_CC = startup.cc +LIBS = libc ada +INC_DIR += $(PRG_DIR)