Merge branch 'master' of git://github.com/erikcharlebois/factor
						commit
						b7164ee4c1
					
				
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -0,0 +1,180 @@
 | 
				
			||||||
 | 
					! Copyright (C) 2010 Erik Charlebois.
 | 
				
			||||||
 | 
					! See http://factorcode.org/license.txt for BSD license.
 | 
				
			||||||
 | 
					USING: accessors byte-arrays elf kernel sequences tools.test ;
 | 
				
			||||||
 | 
					IN: elf.tests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ".interp"
 | 
				
			||||||
 | 
					        ".note.ABI-tag"
 | 
				
			||||||
 | 
					        ".note.gnu.build-id"
 | 
				
			||||||
 | 
					        ".hash"
 | 
				
			||||||
 | 
					        ".gnu.hash"
 | 
				
			||||||
 | 
					        ".dynsym"
 | 
				
			||||||
 | 
					        ".dynstr"
 | 
				
			||||||
 | 
					        ".gnu.version"
 | 
				
			||||||
 | 
					        ".gnu.version_r"
 | 
				
			||||||
 | 
					        ".rela.dyn"
 | 
				
			||||||
 | 
					        ".rela.plt"
 | 
				
			||||||
 | 
					        ".init"
 | 
				
			||||||
 | 
					        ".plt"
 | 
				
			||||||
 | 
					        ".text"
 | 
				
			||||||
 | 
					        ".fini"
 | 
				
			||||||
 | 
					        ".rodata"
 | 
				
			||||||
 | 
					        ".eh_frame_hdr"
 | 
				
			||||||
 | 
					        ".eh_frame"
 | 
				
			||||||
 | 
					        ".ctors"
 | 
				
			||||||
 | 
					        ".dtors"
 | 
				
			||||||
 | 
					        ".jcr"
 | 
				
			||||||
 | 
					        ".dynamic"
 | 
				
			||||||
 | 
					        ".got"
 | 
				
			||||||
 | 
					        ".got.plt"
 | 
				
			||||||
 | 
					        ".data"
 | 
				
			||||||
 | 
					        ".bss"
 | 
				
			||||||
 | 
					        ".comment"
 | 
				
			||||||
 | 
					        ".debug_aranges"
 | 
				
			||||||
 | 
					        ".debug_pubnames"
 | 
				
			||||||
 | 
					        ".debug_info"
 | 
				
			||||||
 | 
					        ".debug_abbrev"
 | 
				
			||||||
 | 
					        ".debug_line"
 | 
				
			||||||
 | 
					        ".debug_str"
 | 
				
			||||||
 | 
					        ".shstrtab"
 | 
				
			||||||
 | 
					        ".symtab"
 | 
				
			||||||
 | 
					        ".strtab"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					[
 | 
				
			||||||
 | 
					    "resource:extra/elf/a.elf" [
 | 
				
			||||||
 | 
					        sections [ name>> ] map
 | 
				
			||||||
 | 
					    ] with-mapped-elf
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        ".interp"
 | 
				
			||||||
 | 
					        ".note.ABI-tag"
 | 
				
			||||||
 | 
					        ".note.gnu.build-id"
 | 
				
			||||||
 | 
					        ".hash"
 | 
				
			||||||
 | 
					        ".gnu.hash"
 | 
				
			||||||
 | 
					        ".dynsym"
 | 
				
			||||||
 | 
					        ".dynstr"
 | 
				
			||||||
 | 
					        ".gnu.version"
 | 
				
			||||||
 | 
					        ".gnu.version_r"
 | 
				
			||||||
 | 
					        ".rela.dyn"
 | 
				
			||||||
 | 
					        ".rela.plt"
 | 
				
			||||||
 | 
					        ".init"
 | 
				
			||||||
 | 
					        ".plt"
 | 
				
			||||||
 | 
					        ".text"
 | 
				
			||||||
 | 
					        ".fini"
 | 
				
			||||||
 | 
					        ".rodata"
 | 
				
			||||||
 | 
					        ".eh_frame_hdr"
 | 
				
			||||||
 | 
					        ".eh_frame"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					[
 | 
				
			||||||
 | 
					    "resource:extra/elf/a.elf" [
 | 
				
			||||||
 | 
					        segments [ program-header>> p_type>> PT_LOAD = ] find nip
 | 
				
			||||||
 | 
					        sections [ name>> ] map
 | 
				
			||||||
 | 
					    ] with-mapped-elf
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					        "init.c"
 | 
				
			||||||
 | 
					        "call_gmon_start"
 | 
				
			||||||
 | 
					        "crtstuff.c"
 | 
				
			||||||
 | 
					        "__CTOR_LIST__"
 | 
				
			||||||
 | 
					        "__DTOR_LIST__"
 | 
				
			||||||
 | 
					        "__JCR_LIST__"
 | 
				
			||||||
 | 
					        "__do_global_dtors_aux"
 | 
				
			||||||
 | 
					        "completed.7342"
 | 
				
			||||||
 | 
					        "dtor_idx.7344"
 | 
				
			||||||
 | 
					        "frame_dummy"
 | 
				
			||||||
 | 
					        "crtstuff.c"
 | 
				
			||||||
 | 
					        "__CTOR_END__"
 | 
				
			||||||
 | 
					        "__FRAME_END__"
 | 
				
			||||||
 | 
					        "__JCR_END__"
 | 
				
			||||||
 | 
					        "__do_global_ctors_aux"
 | 
				
			||||||
 | 
					        "test.c"
 | 
				
			||||||
 | 
					        "_GLOBAL_OFFSET_TABLE_"
 | 
				
			||||||
 | 
					        "__init_array_end"
 | 
				
			||||||
 | 
					        "__init_array_start"
 | 
				
			||||||
 | 
					        "_DYNAMIC"
 | 
				
			||||||
 | 
					        "data_start"
 | 
				
			||||||
 | 
					        "printf@@GLIBC_2.2.5"
 | 
				
			||||||
 | 
					        "__libc_csu_fini"
 | 
				
			||||||
 | 
					        "_start"
 | 
				
			||||||
 | 
					        "__gmon_start__"
 | 
				
			||||||
 | 
					        "_Jv_RegisterClasses"
 | 
				
			||||||
 | 
					        "_fini"
 | 
				
			||||||
 | 
					        "__libc_start_main@@GLIBC_2.2.5"
 | 
				
			||||||
 | 
					        "_IO_stdin_used"
 | 
				
			||||||
 | 
					        "__data_start"
 | 
				
			||||||
 | 
					        "__dso_handle"
 | 
				
			||||||
 | 
					        "__DTOR_END__"
 | 
				
			||||||
 | 
					        "__libc_csu_init"
 | 
				
			||||||
 | 
					        "__bss_start"
 | 
				
			||||||
 | 
					        "_end"
 | 
				
			||||||
 | 
					        "_edata"
 | 
				
			||||||
 | 
					        "main"
 | 
				
			||||||
 | 
					        "_init"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					[
 | 
				
			||||||
 | 
					    "resource:extra/elf/a.elf" [
 | 
				
			||||||
 | 
					        sections ".symtab" find-section symbols
 | 
				
			||||||
 | 
					        [ name>> ] map
 | 
				
			||||||
 | 
					    ] with-mapped-elf
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    B{
 | 
				
			||||||
 | 
					        85 72 137 229 184 44 6 64 0 72 137 199 184 0 0 0 0 232 222
 | 
				
			||||||
 | 
					        254 255 255 201 195
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					[
 | 
				
			||||||
 | 
					    "resource:extra/elf/a.elf" [
 | 
				
			||||||
 | 
					        sections ".symtab" "main" find-section-symbol
 | 
				
			||||||
 | 
					        symbol-data >byte-array
 | 
				
			||||||
 | 
					    ] with-mapped-elf
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					unit-test
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
! Copyright (C) 2010 Erik Charlebois.
 | 
					! Copyright (C) 2010 Erik Charlebois.
 | 
				
			||||||
! See http://factorcode.org/license.txt for BSD license.
 | 
					! See http://factorcode.org/license.txt for BSD license.
 | 
				
			||||||
USING: accessors alien alien.c-types alien.strings alien.syntax arrays
 | 
					USING: accessors alien alien.c-types alien.strings alien.syntax arrays
 | 
				
			||||||
classes.struct fry io.encodings.ascii kernel locals math
 | 
					classes.struct fry io.encodings.ascii io.mmap kernel locals math
 | 
				
			||||||
math.intervals sequences specialized-arrays strings typed ;
 | 
					math.intervals sequences specialized-arrays strings typed ;
 | 
				
			||||||
IN: elf
 | 
					IN: elf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -611,4 +611,16 @@ M:: segment sections ( segment -- sections )
 | 
				
			||||||
    symbol sym>> st_size>> <direct-uchar-array> ;
 | 
					    symbol sym>> st_size>> <direct-uchar-array> ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: find-section ( sections name -- section/f )
 | 
					: find-section ( sections name -- section/f )
 | 
				
			||||||
    '[ name>> _ = ] find nip ;
 | 
					    '[ name>> _ = ] find nip ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: find-symbol ( symbols name -- symbol/f )
 | 
				
			||||||
 | 
					    '[ name>> _ = ] find nip ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: find-section-symbol ( sections section symbol -- symbol/f )
 | 
				
			||||||
 | 
					    [ find-section ] dip over [
 | 
				
			||||||
 | 
					        [ symbols ] dip find-symbol ] [ 2drop f ] if ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: with-mapped-elf ( path quot -- )
 | 
				
			||||||
 | 
					    '[
 | 
				
			||||||
 | 
					        address>> <elf> @
 | 
				
			||||||
 | 
					    ] with-mapped-file ; inline
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,7 +16,7 @@ HELP: print-symbol
 | 
				
			||||||
{ $description "Prints the value, section and name of the given symbol." } ;
 | 
					{ $description "Prints the value, section and name of the given symbol." } ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ARTICLE: "elf.nm" "ELF nm"
 | 
					ARTICLE: "elf.nm" "ELF nm"
 | 
				
			||||||
{ $description "Utility to print the values, sections and names of the symbols in a given ELF file. In an ELF executable or shared library, the symbol values are typically their virtual addresses. In a relocatable ELF object, they are section-relative offsets." }
 | 
					"The " { $vocab-link "elf.nm" } " vocab prints the values, sections and names of the symbols in a given ELF file. In an ELF executable or shared library, the symbol values are typically their virtual addresses. In a relocatable ELF object, they are section-relative offsets."
 | 
				
			||||||
;
 | 
					;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ABOUT: "elf.nm"
 | 
					ABOUT: "elf.nm"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,51 @@
 | 
				
			||||||
 | 
					! Copyright (C) 2010 Erik Charlebois.
 | 
				
			||||||
 | 
					! See http://factorcode.org/license.txt for BSD license.
 | 
				
			||||||
 | 
					USING: elf.nm io io.streams.string kernel multiline strings tools.test
 | 
				
			||||||
 | 
					literals ;
 | 
				
			||||||
 | 
					IN: elf.nm.tests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STRING: validation-output
 | 
				
			||||||
 | 
					0000000000000000 absolute         init.c
 | 
				
			||||||
 | 
					000000000040046c .text            call_gmon_start
 | 
				
			||||||
 | 
					0000000000000000 absolute         crtstuff.c
 | 
				
			||||||
 | 
					0000000000600e18 .ctors           __CTOR_LIST__
 | 
				
			||||||
 | 
					0000000000600e28 .dtors           __DTOR_LIST__
 | 
				
			||||||
 | 
					0000000000600e38 .jcr             __JCR_LIST__
 | 
				
			||||||
 | 
					0000000000400490 .text            __do_global_dtors_aux
 | 
				
			||||||
 | 
					0000000000601020 .bss             completed.7342
 | 
				
			||||||
 | 
					0000000000601028 .bss             dtor_idx.7344
 | 
				
			||||||
 | 
					0000000000400500 .text            frame_dummy
 | 
				
			||||||
 | 
					0000000000000000 absolute         crtstuff.c
 | 
				
			||||||
 | 
					0000000000600e20 .ctors           __CTOR_END__
 | 
				
			||||||
 | 
					00000000004006d8 .eh_frame        __FRAME_END__
 | 
				
			||||||
 | 
					0000000000600e38 .jcr             __JCR_END__
 | 
				
			||||||
 | 
					00000000004005e0 .text            __do_global_ctors_aux
 | 
				
			||||||
 | 
					0000000000000000 absolute         test.c
 | 
				
			||||||
 | 
					0000000000600fe8 .got.plt         _GLOBAL_OFFSET_TABLE_
 | 
				
			||||||
 | 
					0000000000600e14 .ctors           __init_array_end
 | 
				
			||||||
 | 
					0000000000600e14 .ctors           __init_array_start
 | 
				
			||||||
 | 
					0000000000600e40 .dynamic         _DYNAMIC
 | 
				
			||||||
 | 
					0000000000601010 .data            data_start
 | 
				
			||||||
 | 
					0000000000000000 undefined        printf@@GLIBC_2.2.5
 | 
				
			||||||
 | 
					0000000000400540 .text            __libc_csu_fini
 | 
				
			||||||
 | 
					0000000000400440 .text            _start
 | 
				
			||||||
 | 
					0000000000000000 undefined        __gmon_start__
 | 
				
			||||||
 | 
					0000000000000000 undefined        _Jv_RegisterClasses
 | 
				
			||||||
 | 
					0000000000400618 .fini            _fini
 | 
				
			||||||
 | 
					0000000000000000 undefined        __libc_start_main@@GLIBC_2.2.5
 | 
				
			||||||
 | 
					0000000000400628 .rodata          _IO_stdin_used
 | 
				
			||||||
 | 
					0000000000601010 .data            __data_start
 | 
				
			||||||
 | 
					0000000000601018 .data            __dso_handle
 | 
				
			||||||
 | 
					0000000000600e30 .dtors           __DTOR_END__
 | 
				
			||||||
 | 
					0000000000400550 .text            __libc_csu_init
 | 
				
			||||||
 | 
					0000000000601020 absolute         __bss_start
 | 
				
			||||||
 | 
					0000000000601030 absolute         _end
 | 
				
			||||||
 | 
					0000000000601020 absolute         _edata
 | 
				
			||||||
 | 
					0000000000400524 .text            main
 | 
				
			||||||
 | 
					00000000004003f0 .init            _init
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{ $ validation-output }
 | 
				
			||||||
 | 
					[ <string-writer> dup [ "resource:extra/elf/a.elf" elf-nm ] with-output-stream >string ]
 | 
				
			||||||
 | 
					unit-test
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,7 @@ USING: accessors combinators elf formatting io.mmap kernel sequences ;
 | 
				
			||||||
IN: elf.nm
 | 
					IN: elf.nm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: print-symbol ( sections symbol -- )
 | 
					: print-symbol ( sections symbol -- )
 | 
				
			||||||
    [ sym>> st_value>> "%016d " printf ]
 | 
					    [ sym>> st_value>> "%016x " printf ]
 | 
				
			||||||
    [
 | 
					    [
 | 
				
			||||||
        sym>> st_shndx>>
 | 
					        sym>> st_shndx>>
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
| 
						 | 
					@ -16,10 +16,9 @@ IN: elf.nm
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
    [ name>> "%s\n" printf ] tri ;
 | 
					    [ name>> "%s\n" printf ] tri ;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
: nm ( path -- )
 | 
					: elf-nm ( path -- )
 | 
				
			||||||
    [
 | 
					    [
 | 
				
			||||||
        address>> <elf> sections
 | 
					        sections dup ".symtab" find-section
 | 
				
			||||||
        dup ".symtab" find-section
 | 
					 | 
				
			||||||
        symbols [ name>> empty? not ] filter
 | 
					        symbols [ name>> empty? not ] filter
 | 
				
			||||||
        [ print-symbol ] with each
 | 
					        [ print-symbol ] with each
 | 
				
			||||||
    ] with-mapped-file ;
 | 
					    ] with-mapped-elf ;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -0,0 +1,26 @@
 | 
				
			||||||
 | 
					! Copyright (C) 2010 Erik Charlebois.
 | 
				
			||||||
 | 
					! See http://factorcode.org/license.txt for BSD license.
 | 
				
			||||||
 | 
					USING: io io.streams.string kernel literals macho multiline strings
 | 
				
			||||||
 | 
					tools.test ;
 | 
				
			||||||
 | 
					IN: macho.tests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STRING: validation-output
 | 
				
			||||||
 | 
					0000000100000f1c __stub_helper    stub helpers
 | 
				
			||||||
 | 
					0000000100001040 __program_vars  _pvars
 | 
				
			||||||
 | 
					0000000100001068 __data          _NXArgc
 | 
				
			||||||
 | 
					0000000100001070 __data          _NXArgv
 | 
				
			||||||
 | 
					0000000100001080 __data          ___progname
 | 
				
			||||||
 | 
					0000000100000000                 __mh_execute_header
 | 
				
			||||||
 | 
					0000000100001078 __data          _environ
 | 
				
			||||||
 | 
					0000000100000ef8 __text          _main
 | 
				
			||||||
 | 
					0000000100000ebc __text          start
 | 
				
			||||||
 | 
					0000000000000000                 ___gxx_personality_v0
 | 
				
			||||||
 | 
					0000000000000000                 _exit
 | 
				
			||||||
 | 
					0000000000000000                 _printf
 | 
				
			||||||
 | 
					0000000000000000                 dyld_stub_binder
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{ $ validation-output }
 | 
				
			||||||
 | 
					[ <string-writer> dup [ "resource:extra/macho/a.macho" macho-nm ] with-output-stream >string ]
 | 
				
			||||||
 | 
					unit-test
 | 
				
			||||||
| 
						 | 
					@ -1,8 +1,13 @@
 | 
				
			||||||
! Copyright (C) 2010 Erik Charlebois.
 | 
					! Copyright (C) 2010 Erik Charlebois.
 | 
				
			||||||
! See http:// factorcode.org/license.txt for BSD license.
 | 
					! See http:// factorcode.org/license.txt for BSD license.
 | 
				
			||||||
USING: alien.c-types alien.syntax classes.struct kernel literals math ;
 | 
					USING: accessors alien alien.c-types alien.strings alien.syntax
 | 
				
			||||||
 | 
					classes classes.struct combinators io.encodings.ascii
 | 
				
			||||||
 | 
					io.encodings.string kernel literals make math sequences
 | 
				
			||||||
 | 
					specialized-arrays typed fry io.mmap formatting locals ;
 | 
				
			||||||
 | 
					FROM: alien.c-types => short ;
 | 
				
			||||||
IN: macho
 | 
					IN: macho
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					! FFI data
 | 
				
			||||||
TYPEDEF: int       integer_t
 | 
					TYPEDEF: int       integer_t
 | 
				
			||||||
TYPEDEF: int       vm_prot_t
 | 
					TYPEDEF: int       vm_prot_t
 | 
				
			||||||
TYPEDEF: integer_t cpu_type_t
 | 
					TYPEDEF: integer_t cpu_type_t
 | 
				
			||||||
| 
						 | 
					@ -804,3 +809,124 @@ C-ENUM: reloc_type_ppc
 | 
				
			||||||
    PPC_RELOC_JBSR
 | 
					    PPC_RELOC_JBSR
 | 
				
			||||||
    PPC_RELOC_LO14_SECTDIFF
 | 
					    PPC_RELOC_LO14_SECTDIFF
 | 
				
			||||||
    PPC_RELOC_LOCAL_SECTDIFF ;
 | 
					    PPC_RELOC_LOCAL_SECTDIFF ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					! Low-level interface
 | 
				
			||||||
 | 
					SPECIALIZED-ARRAYS: section section_64 nlist nlist_64 ;
 | 
				
			||||||
 | 
					UNION: mach_header_32/64 mach_header mach_header_64 ;
 | 
				
			||||||
 | 
					UNION: segment_command_32/64 segment_command segment_command_64 ;
 | 
				
			||||||
 | 
					UNION: load-command segment_command segment_command_64
 | 
				
			||||||
 | 
					    dylib_command sub_framework_command
 | 
				
			||||||
 | 
					    sub_client_command sub_umbrella_command sub_library_command
 | 
				
			||||||
 | 
					    prebound_dylib_command dylinker_command thread_command
 | 
				
			||||||
 | 
					    routines_command routines_command_64 symtab_command
 | 
				
			||||||
 | 
					    dysymtab_command twolevel_hints_command uuid_command ;
 | 
				
			||||||
 | 
					UNION: section_32/64 section section_64 ;
 | 
				
			||||||
 | 
					UNION: section_32/64-array section-array section_64-array ;
 | 
				
			||||||
 | 
					UNION: nlist_32/64 nlist nlist_64 ;
 | 
				
			||||||
 | 
					UNION: nlist_32/64-array nlist-array nlist_64-array ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TYPED: 64-bit? ( macho: mach_header_32/64 -- ? )
 | 
				
			||||||
 | 
					    magic>> {
 | 
				
			||||||
 | 
					        { MH_MAGIC_64 [ t ] }
 | 
				
			||||||
 | 
					        { MH_CIGAM_64 [ t ] }
 | 
				
			||||||
 | 
					        [ drop f ]
 | 
				
			||||||
 | 
					    } case ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TYPED: macho-header ( c-ptr -- macho: mach_header_32/64 )
 | 
				
			||||||
 | 
					    dup mach_header_64 memory>struct 64-bit?
 | 
				
			||||||
 | 
					    [ mach_header_64 memory>struct ]
 | 
				
			||||||
 | 
					    [ mach_header memory>struct ] if ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: cmd>load-command ( cmd -- load-command )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        { LC_UUID           [ uuid_command           ] }
 | 
				
			||||||
 | 
					        { LC_SEGMENT        [ segment_command        ] }
 | 
				
			||||||
 | 
					        { LC_SEGMENT_64     [ segment_command_64     ] }
 | 
				
			||||||
 | 
					        { LC_SYMTAB         [ symtab_command         ] }
 | 
				
			||||||
 | 
					        { LC_DYSYMTAB       [ dysymtab_command       ] }
 | 
				
			||||||
 | 
					        { LC_THREAD         [ thread_command         ] }
 | 
				
			||||||
 | 
					        { LC_UNIXTHREAD     [ thread_command         ] }
 | 
				
			||||||
 | 
					        { LC_LOAD_DYLIB     [ dylib_command          ] }
 | 
				
			||||||
 | 
					        { LC_ID_DYLIB       [ dylib_command          ] }
 | 
				
			||||||
 | 
					        { LC_PREBOUND_DYLIB [ prebound_dylib_command ] }
 | 
				
			||||||
 | 
					        { LC_LOAD_DYLINKER  [ dylinker_command       ] }
 | 
				
			||||||
 | 
					        { LC_ID_DYLINKER    [ dylinker_command       ] }
 | 
				
			||||||
 | 
					        { LC_ROUTINES       [ routines_command       ] }
 | 
				
			||||||
 | 
					        { LC_ROUTINES_64    [ routines_command_64    ] }
 | 
				
			||||||
 | 
					        { LC_TWOLEVEL_HINTS [ twolevel_hints_command ] }
 | 
				
			||||||
 | 
					        { LC_SUB_FRAMEWORK  [ sub_framework_command  ] }
 | 
				
			||||||
 | 
					        { LC_SUB_UMBRELLA   [ sub_umbrella_command   ] }
 | 
				
			||||||
 | 
					        { LC_SUB_LIBRARY    [ sub_library_command    ] }
 | 
				
			||||||
 | 
					        { LC_SUB_CLIENT     [ sub_client_command     ] }
 | 
				
			||||||
 | 
					        { LC_DYLD_INFO      [ dyld_info_command      ] }
 | 
				
			||||||
 | 
					        { LC_DYLD_INFO_ONLY [ dyld_info_command      ] }
 | 
				
			||||||
 | 
					    } case ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: read-command ( cmd -- next-cmd )
 | 
				
			||||||
 | 
					    dup load_command memory>struct
 | 
				
			||||||
 | 
					    [ cmd>> cmd>load-command memory>struct , ]
 | 
				
			||||||
 | 
					    [ cmdsize>> swap <displaced-alien> ] 2bi ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TYPED: load-commands ( macho: mach_header_32/64 -- load-commands )
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        [ class heap-size ]
 | 
				
			||||||
 | 
					        [ >c-ptr <displaced-alien> ]
 | 
				
			||||||
 | 
					        [ ncmds>> ] tri iota [
 | 
				
			||||||
 | 
					            drop read-command
 | 
				
			||||||
 | 
					        ] each drop
 | 
				
			||||||
 | 
					    ] { } make ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: segment-commands ( load-commands -- segment-commands )
 | 
				
			||||||
 | 
					    [ segment_command_32/64? ] filter ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: symtab-commands ( load-commands -- segment-commands )
 | 
				
			||||||
 | 
					    [ symtab_command? ] filter ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: read-array-string ( uchar-array -- string )
 | 
				
			||||||
 | 
					    ascii decode [ 0 = not ] filter ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: segment-sections ( segment-command -- sections )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        [ class heap-size ]
 | 
				
			||||||
 | 
					        [ >c-ptr <displaced-alien> ]
 | 
				
			||||||
 | 
					        [ nsects>> ]
 | 
				
			||||||
 | 
					        [ segment_command_64? ]
 | 
				
			||||||
 | 
					    } cleave
 | 
				
			||||||
 | 
					    [ <direct-section_64-array> ]
 | 
				
			||||||
 | 
					    [ <direct-section-array> ] if ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: sections-array ( segment-commands -- sections-array )
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        dup first segment_command_64?
 | 
				
			||||||
 | 
					        [ section_64 ] [ section ] if <struct> ,
 | 
				
			||||||
 | 
					        segment-commands [ segment-sections [ , ] each ] each
 | 
				
			||||||
 | 
					    ] { } make ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: symbols ( mach-header symtab-command -- symbols string-table )
 | 
				
			||||||
 | 
					    [ symoff>> swap >c-ptr <displaced-alien> ]
 | 
				
			||||||
 | 
					    [ nsyms>> swap 64-bit?
 | 
				
			||||||
 | 
					      [ <direct-nlist_64-array> ]
 | 
				
			||||||
 | 
					      [ <direct-nlist-array> ] if ]
 | 
				
			||||||
 | 
					    [ stroff>> swap >c-ptr <displaced-alien> ] 2tri ;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					: symbol-name ( symbol string-table -- name )
 | 
				
			||||||
 | 
					    [ n_strx>> ] dip <displaced-alien> ascii alien>string ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: with-mapped-macho ( path quot -- )
 | 
				
			||||||
 | 
					    '[
 | 
				
			||||||
 | 
					        address>> macho-header @
 | 
				
			||||||
 | 
					    ] with-mapped-file ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: macho-nm ( path -- )
 | 
				
			||||||
 | 
					    [| macho |
 | 
				
			||||||
 | 
					        macho load-commands segment-commands sections-array :> sections
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        macho load-commands symtab-commands [| symtab |
 | 
				
			||||||
 | 
					            macho symtab symbols [
 | 
				
			||||||
 | 
					                [ drop n_value>> "%016x " printf ]
 | 
				
			||||||
 | 
					                [ drop n_sect>> sections nth sectname>>
 | 
				
			||||||
 | 
					                  read-array-string "%-16s" printf ]
 | 
				
			||||||
 | 
					                [ symbol-name "%s\n" printf ] 2tri
 | 
				
			||||||
 | 
					            ] curry each
 | 
				
			||||||
 | 
					        ] each
 | 
				
			||||||
 | 
					    ] with-mapped-macho ;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,9 @@
 | 
				
			||||||
! Copyright (C) 2010 Erik Charlebois.
 | 
					! Copyright (C) 2010 Erik Charlebois.
 | 
				
			||||||
! See http://factorcode.org/license.txt for BSD license.
 | 
					! See http://factorcode.org/license.txt for BSD license.
 | 
				
			||||||
USING: accessors alien alien.accessors alien.c-types arrays
 | 
					USING: accessors alien alien.c-types arrays byte-arrays combinators
 | 
				
			||||||
byte-arrays combinators combinators.smart continuations destructors
 | 
					combinators.smart destructors io.encodings.ascii io.encodings.string
 | 
				
			||||||
fry io.encodings.ascii io.encodings.string kernel libc locals macros
 | 
					kernel libc locals math namespaces opencl.ffi sequences shuffle
 | 
				
			||||||
math math.order multiline opencl.ffi prettyprint sequences
 | 
					specialized-arrays variants ;
 | 
				
			||||||
specialized-arrays typed variants namespaces ;
 | 
					 | 
				
			||||||
IN: opencl
 | 
					IN: opencl
 | 
				
			||||||
SPECIALIZED-ARRAYS: void* char size_t ;
 | 
					SPECIALIZED-ARRAYS: void* char size_t ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,15 +16,23 @@ ERROR: cl-error err ;
 | 
				
			||||||
: cl-not-null ( err -- )
 | 
					: cl-not-null ( err -- )
 | 
				
			||||||
    dup f = [ cl-error ] [ drop ] if ; inline
 | 
					    dup f = [ cl-error ] [ drop ] if ; inline
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
MACRO: info ( info-quot lift-quot -- quot )
 | 
					: info-data-size ( handle name info-quot -- size_t )
 | 
				
			||||||
    [ dup ] dip '[ 2dup 0 f 0 <size_t> _ '[ _ call cl-success ] keep
 | 
					    [ 0 f 0 <size_t> ] dip [ call cl-success ] 2keep drop *size_t ; inline
 | 
				
			||||||
       *size_t dup <byte-array> _ '[ f _ call cl-success ] keep
 | 
					 | 
				
			||||||
       _ call ] ;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
MACRO: 2info ( info-quot lift-quot -- quot )
 | 
					: info-data-bytes ( handle name info-quot size -- bytes )
 | 
				
			||||||
    [ dup ] dip '[ 3dup 0 f 0 <size_t> _ '[ _ call cl-success ] keep
 | 
					    swap [ dup <byte-array> f ] dip [ call cl-success ] 3keep 2drop ; inline
 | 
				
			||||||
       *size_t dup <byte-array> _ '[ f _ call cl-success ] keep
 | 
					
 | 
				
			||||||
       _ call ] ;
 | 
					: info ( handle name info-quot lift-quot -- value )
 | 
				
			||||||
 | 
					    [ 3dup info-data-size info-data-bytes ] dip call ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: 2info-data-size ( handle1 handle2 name info-quot -- size_t )
 | 
				
			||||||
 | 
					    [ 0 f 0 <size_t> ] dip [ call cl-success ] 2keep drop *size_t ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: 2info-data-bytes ( handle1 handle2 name info-quot size -- bytes )
 | 
				
			||||||
 | 
					    swap [ dup <byte-array> f ] dip [ call cl-success ] 3keep 2drop ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: 2info ( handle1 handle2 name info_quot lift_quot -- value )
 | 
				
			||||||
 | 
					    [ 4dup 2info-data-size 2info-data-bytes ] dip call ; inline
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
: info-bool ( handle name quot -- ? )
 | 
					: info-bool ( handle name quot -- ? )
 | 
				
			||||||
    [ *uint CL_TRUE = ] info ; inline
 | 
					    [ *uint CL_TRUE = ] info ; inline
 | 
				
			||||||
| 
						 | 
					@ -156,6 +163,7 @@ C: <cl-buffer-range> cl-buffer-range
 | 
				
			||||||
SYMBOLS: cl-current-context cl-current-queue cl-current-device ;
 | 
					SYMBOLS: cl-current-context cl-current-queue cl-current-device ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<PRIVATE
 | 
					<PRIVATE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: (current-cl-context) ( -- cl-context )
 | 
					: (current-cl-context) ( -- cl-context )
 | 
				
			||||||
    cl-current-context get ; inline
 | 
					    cl-current-context get ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -200,7 +208,7 @@ M: cl-filter-linear  filter-mode-constant drop CL_FILTER_LINEAR ;
 | 
				
			||||||
    } case ; inline
 | 
					    } case ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: platform-info-string ( handle name -- string )
 | 
					: platform-info-string ( handle name -- string )
 | 
				
			||||||
    [ clGetPlatformInfo ] info-string ; inline
 | 
					    [ clGetPlatformInfo ] info-string ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: platform-info ( id -- profile version name vendor extensions )
 | 
					: platform-info ( id -- profile version name vendor extensions )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					@ -229,22 +237,22 @@ M: cl-filter-linear  filter-mode-constant drop CL_FILTER_LINEAR ;
 | 
				
			||||||
    } case ; inline
 | 
					    } case ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: device-info-bool ( handle name -- ? )
 | 
					: device-info-bool ( handle name -- ? )
 | 
				
			||||||
    [ clGetDeviceInfo ] info-bool ; inline
 | 
					    [ clGetDeviceInfo ] info-bool ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: device-info-ulong ( handle name -- ulong )
 | 
					: device-info-ulong ( handle name -- ulong )
 | 
				
			||||||
    [ clGetDeviceInfo ] info-ulong ; inline
 | 
					    [ clGetDeviceInfo ] info-ulong ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: device-info-uint ( handle name -- uint )
 | 
					: device-info-uint ( handle name -- uint )
 | 
				
			||||||
    [ clGetDeviceInfo ] info-uint ; inline
 | 
					    [ clGetDeviceInfo ] info-uint ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: device-info-string ( handle name -- string )
 | 
					: device-info-string ( handle name -- string )
 | 
				
			||||||
    [ clGetDeviceInfo ] info-string ; inline
 | 
					    [ clGetDeviceInfo ] info-string ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: device-info-size_t ( handle name -- size_t )
 | 
					: device-info-size_t ( handle name -- size_t )
 | 
				
			||||||
    [ clGetDeviceInfo ] info-size_t ; inline
 | 
					    [ clGetDeviceInfo ] info-size_t ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: device-info-size_t-array ( handle name -- size_t-array )
 | 
					: device-info-size_t-array ( handle name -- size_t-array )
 | 
				
			||||||
    [ clGetDeviceInfo ] info-size_t-array ; inline
 | 
					    [ clGetDeviceInfo ] info-size_t-array ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: device-info ( device-id -- device )
 | 
					: device-info ( device-id -- device )
 | 
				
			||||||
    dup {
 | 
					    dup {
 | 
				
			||||||
| 
						 | 
					@ -309,23 +317,23 @@ M: cl-filter-linear  filter-mode-constant drop CL_FILTER_LINEAR ;
 | 
				
			||||||
    ] 2bi ; inline
 | 
					    ] 2bi ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: command-queue-info-ulong ( handle name -- ulong )
 | 
					: command-queue-info-ulong ( handle name -- ulong )
 | 
				
			||||||
    [ clGetCommandQueueInfo ] info-ulong ; inline
 | 
					    [ clGetCommandQueueInfo ] info-ulong ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: sampler-info-bool ( handle name -- ? )
 | 
					: sampler-info-bool ( handle name -- ? )
 | 
				
			||||||
    [ clGetSamplerInfo ] info-bool ; inline
 | 
					    [ clGetSamplerInfo ] info-bool ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: sampler-info-uint ( handle name -- uint )
 | 
					: sampler-info-uint ( handle name -- uint )
 | 
				
			||||||
    [ clGetSamplerInfo ] info-uint ; inline
 | 
					    [ clGetSamplerInfo ] info-uint ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: program-build-info-string ( program-handle device-handle name -- string )
 | 
					: program-build-info-string ( program-handle device-handle name -- string )
 | 
				
			||||||
    [ clGetProgramBuildInfo ] 2info-string ; inline
 | 
					    [ clGetProgramBuildInfo ] 2info-string ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: program-build-log ( program-handle device-handle -- string )
 | 
					: program-build-log ( program-handle device-handle -- string )
 | 
				
			||||||
    CL_PROGRAM_BUILD_LOG program-build-info-string ; inline
 | 
					    CL_PROGRAM_BUILD_LOG program-build-info-string ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: strings>char*-array ( strings -- char*-array )
 | 
					: strings>char*-array ( strings -- char*-array )
 | 
				
			||||||
    [ ascii encode dup length dup malloc [ cl-not-null ]
 | 
					    [ ascii encode dup length dup malloc [ cl-not-null ]
 | 
				
			||||||
      keep &free [ -rot memcpy ] keep ] void*-array{ } map-as ; inline
 | 
					      keep &free [ -rot memcpy ] keep ] void*-array{ } map-as ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: (program) ( cl-context sources -- program-handle )
 | 
					: (program) ( cl-context sources -- program-handle )
 | 
				
			||||||
    [ handle>> ] dip [
 | 
					    [ handle>> ] dip [
 | 
				
			||||||
| 
						 | 
					@ -347,19 +355,19 @@ M: cl-filter-linear  filter-mode-constant drop CL_FILTER_LINEAR ;
 | 
				
			||||||
    } case ;
 | 
					    } case ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: kernel-info-string ( handle name -- string )
 | 
					: kernel-info-string ( handle name -- string )
 | 
				
			||||||
    [ clGetKernelInfo ] info-string ; inline
 | 
					    [ clGetKernelInfo ] info-string ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: kernel-info-uint ( handle name -- uint )
 | 
					: kernel-info-uint ( handle name -- uint )
 | 
				
			||||||
    [ clGetKernelInfo ] info-uint ; inline
 | 
					    [ clGetKernelInfo ] info-uint ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: kernel-work-group-info-size_t ( handle1 handle2 name -- size_t )
 | 
					: kernel-work-group-info-size_t ( handle1 handle2 name -- size_t )
 | 
				
			||||||
    [ clGetKernelWorkGroupInfo ] 2info-size_t ; inline
 | 
					    [ clGetKernelWorkGroupInfo ] 2info-size_t ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: event-info-uint ( handle name -- uint )
 | 
					: event-info-uint ( handle name -- uint )
 | 
				
			||||||
    [ clGetEventInfo ] info-uint ; inline
 | 
					    [ clGetEventInfo ] info-uint ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: event-info-int ( handle name -- int )
 | 
					: event-info-int ( handle name -- int )
 | 
				
			||||||
    [ clGetEventInfo ] info-int ; inline
 | 
					    [ clGetEventInfo ] info-int ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: cl_command_type>command-type ( cl_command-type -- command-type )
 | 
					: cl_command_type>command-type ( cl_command-type -- command-type )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					@ -392,8 +400,7 @@ M: cl-filter-linear  filter-mode-constant drop CL_FILTER_LINEAR ;
 | 
				
			||||||
    } case ; inline
 | 
					    } case ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: profiling-info-ulong ( handle name -- ulong )
 | 
					: profiling-info-ulong ( handle name -- ulong )
 | 
				
			||||||
    [ clGetEventProfilingInfo ] info-ulong ; inline
 | 
					    [ clGetEventProfilingInfo ] info-ulong ;
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
: bind-kernel-arg-buffer ( kernel index buffer -- )
 | 
					: bind-kernel-arg-buffer ( kernel index buffer -- )
 | 
				
			||||||
    [ handle>> ] [ cl_mem heap-size ] [ handle>> <void*> ] tri*
 | 
					    [ handle>> ] [ cl_mem heap-size ] [ handle>> <void*> ] tri*
 | 
				
			||||||
| 
						 | 
					@ -528,10 +535,10 @@ PRIVATE>
 | 
				
			||||||
    cl-kernel new-disposable swap >>handle ; inline
 | 
					    cl-kernel new-disposable swap >>handle ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: cl-kernel-name ( kernel -- string )
 | 
					: cl-kernel-name ( kernel -- string )
 | 
				
			||||||
    handle>> CL_KERNEL_FUNCTION_NAME kernel-info-string ; inline
 | 
					    handle>> CL_KERNEL_FUNCTION_NAME kernel-info-string ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: cl-kernel-arity ( kernel -- arity )
 | 
					: cl-kernel-arity ( kernel -- arity )
 | 
				
			||||||
    handle>> CL_KERNEL_NUM_ARGS kernel-info-uint ; inline
 | 
					    handle>> CL_KERNEL_NUM_ARGS kernel-info-uint ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: cl-kernel-local-size ( kernel -- size )
 | 
					: cl-kernel-local-size ( kernel -- size )
 | 
				
			||||||
    (current-cl-device) [ handle>> ] bi@ CL_KERNEL_WORK_GROUP_SIZE kernel-work-group-info-size_t ; inline
 | 
					    (current-cl-device) [ handle>> ] bi@ CL_KERNEL_WORK_GROUP_SIZE kernel-work-group-info-size_t ; inline
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue