;===-- Runtime Programs Glue -------------------------------------*- LLVM -*-===
;
;                      High Level Virtual Machine (HLVM)
;
; Copyright (C) 2006 Reid Spencer. All Rights Reserved.
;
; This software is free software; you can redistribute it and/or modify it 
; under the terms of the GNU Lesser General Public License as published by 
; the Free Software Foundation; either version 2.1 of the License, or (at 
; your option) any later version.
;
; This software is distributed in the hope that it will be useful, but WITHOUT
; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
; FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for 
; more details.
;
; You should have received a copy of the GNU Lesser General Public License 
; along with this library in the file named LICENSE.txt; if not, write to the 
; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
; MA 02110-1301 USA
;
;===-------------------------------------------------------------------------===
;
; This file provides some glue between the runtime library and the HLVM compiler
; It arranges to get the address of an "appending linkage" constant array via
; the hlvm_get_programs() function. This is necessary to be done in LLVM 
; assembly because you can't express an "appending linkage" constant array in
; C or C++. Additionally, this provides the null-terminator sentinel that marks
; the end of the array. When the compiler generates code for an HLVM program, it
; creates an entry in this array. Since it is legal to have multiple entry 
; points in HLVM, the resulting array (collected from all Program compilations)
; will contain the complete set of entry points that can be started. This is
; useful where a group of related programs should share the same executable. For
; example, "rm", "cp", "mkdir", "rmdir", etc. all have similar needs and, with
; LLVM, could all be in the same executable. This file makes that magic 
; happen.
; 
;===-------------------------------------------------------------------------===
;
; This is the type for the elements of the hlvm_programs array. Each element
; contains a pointer to a string for the name of the program and a pointer to
; the entry function.
%hlvm_programs_element = type { i8*, i32 (i32, i8**)* }

; This is the appending constant array with 1 element here that is zero
; initialized. This forms the zero-terminator in the array. This module MUST
; be linked LAST in order for this to work.
@hlvm_programs = appending constant [1 x %hlvm_programs_element] zeroinitializer


; This is a very simple function to get the address of %hlvm_programs.
define %hlvm_programs_element* @hlvm_get_programs() {
entry:
  ret %hlvm_programs_element* getelementptr([1 x %hlvm_programs_element]* @hlvm_programs, i32 0, i32 0)
}
