about summary refs log blame commit diff stats
path: root/html/apps/ex12.subx.html
blob: 4f753e5c671065c230da3a057548bb35b758aa6a (plain) (tree)
1
2
3
4
5
6
7
8
9



                                                                                          
                                  

                                                

                                                                                                      
                                                 

                       

                                                                                           
                    
                                     
                                
                                  
           
                                  
                                
                                                                           















                                                                                 
                                                  















                                                                              
                                                                                                                                 
                         
                                                                                                       

                                                                                                                                         
                                                                                 

                                                                                                                                          
                                                                                                                 
                                       
                                              


                                                                                                                                                                                                                            
                                        
                                                                               











                                                                                                                                                                                                                                                                                                                                                                                            
                                        















                                                                                                                                                                      



                                     
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/ex12.subx</title>
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #c6c6c6; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #c6c6c6; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.subxS2Comment { color: #8a8a8a; }
.LineNr { }
.subxS1Comment { color: #0000af; }
.SpecialChar { color: #d70000; }
.Normal { color: #000000; background-color: #c6c6c6; padding-bottom: 1px; }
-->
</style>

<script type='text/javascript'>
<!--

/* function to open any folds containing a jumped-to line before jumping to it */
function JumpToLine()
{
  var lineNum;
  lineNum = window.location.hash;
  lineNum = lineNum.substr(1); /* strip off '#' */

  if (lineNum.indexOf('L') == -1) {
    lineNum = 'L'+lineNum;
  }
  var lineElem = document.getElementById(lineNum);
  /* Always jump to new location even if the line was hidden inside a fold, or
   * we corrected the raw number to a line ID.
   */
  if (lineElem) {
    lineElem.scrollIntoView(true);
  }
  return true;
}
if ('onhashchange' in window) {
  window.onhashchange = JumpToLine;
}

-->
</script>
</head>
<body onload='JumpToLine();'>
<a href='https://github.com/akkartik/mu/blob/master/apps/ex12.subx'>https://github.com/akkartik/mu/blob/master/apps/ex12.subx</a>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr"> 1 </span><span class="subxComment"># Example showing mmap syscall.</span>
<span id="L2" class="LineNr"> 2 </span><span class="subxComment"># Create a new segment using mmap, save the address, write to it.</span>
<span id="L3" class="LineNr"> 3 </span><span class="subxComment">#</span>
<span id="L4" class="LineNr"> 4 </span><span class="subxComment"># To run:</span>
<span id="L5" class="LineNr"> 5 </span><span class="subxComment">#   $ ./bootstrap translate init.linux apps/ex12.subx -o apps/ex12</span>
<span id="L6" class="LineNr"> 6 </span><span class="subxComment">#   $ ./bootstrap run apps/ex12</span>
<span id="L7" class="LineNr"> 7 </span><span class="subxComment"># You shouldn't get a segmentation fault.</span>
<span id="L8" class="LineNr"> 8 </span>
<span id="L9" class="LineNr"> 9 </span>== code
<span id="L10" class="LineNr">10 </span><span class="subxComment">#   instruction                     effective address                                                   register    displacement    immediate</span>
<span id="L11" class="LineNr">11 </span><span class="subxS1Comment"># . op          subop               mod             rm32          base        index         scale       r32</span>
<span id="L12" class="LineNr">12 </span><span class="subxS1Comment"># . 1-3 bytes   3 bits              2 bits          3 bits        3 bits      3 bits        2 bits      2 bits      0/1/2/4 bytes   0/1/2/4 bytes</span>
<span id="L13" class="LineNr">13 </span>
<span id="L14" class="LineNr">14 </span><span class="SpecialChar">Entry</span>:
<span id="L15" class="LineNr">15 </span>    <span class="subxComment"># mmap(Mmap-new-segment-&gt;len)</span>
<span id="L16" class="LineNr">16 </span>    bb/copy-to-ebx  <span class="SpecialChar"><a href='ex12.subx.html#L29'>Mmap-new-segment</a></span>/imm32
<span id="L17" class="LineNr">17 </span>    e8/call  syscall_mmap/disp32
<span id="L18" class="LineNr">18 </span>
<span id="L19" class="LineNr">19 </span>    <span class="subxComment"># write to *eax to check that we have access to the newly-allocated segment</span>
<span id="L20" class="LineNr">20 </span>    c7          0/subop/copy        0/mod/direct    0/rm32/eax   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              0x34/imm32        <span class="subxComment"># copy to *eax</span>
<span id="L21" class="LineNr">21 </span>
<span id="L22" class="LineNr">22 </span>    <span class="subxComment"># exit(eax)</span>
<span id="L23" class="LineNr">23 </span>    89/copy                         3/mod/direct    3/rm32/ebx   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          0/r32/eax  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy eax to ebx</span>
<span id="L24" class="LineNr">24 </span>    e8/call  syscall_exit/disp32
<span id="L25" class="LineNr">25 </span>
<span id="L26" class="LineNr">26 </span>== data
<span id="L27" class="LineNr">27 </span>
<span id="L28" class="LineNr">28 </span><span class="subxComment"># various constants used here were found in the Linux sources (search for file mman-common.h)</span>
<span id="L29" class="LineNr">29 </span><span class="SpecialChar">Mmap-new-segment</span>:  <span class="subxComment"># type mmap_arg_struct</span>
<span id="L30" class="LineNr">30 </span>    <span class="subxComment"># addr</span>
<span id="L31" class="LineNr">31 </span>    0/imm32
<span id="L32" class="LineNr">32 </span>    <span class="subxComment"># len</span>
<span id="L33" class="LineNr">33 </span>    0x100/imm32
<span id="L34" class="LineNr">34 </span>    <span class="subxComment"># protection flags</span>
<span id="L35" class="LineNr">35 </span>    3/imm32  <span class="subxComment"># PROT_READ | PROT_WRITE</span>
<span id="L36" class="LineNr">36 </span>    <span class="subxComment"># sharing flags</span>
<span id="L37" class="LineNr">37 </span>    0x22/imm32  <span class="subxComment"># MAP_PRIVATE | MAP_ANONYMOUS</span>
<span id="L38" class="LineNr">38 </span>    <span class="subxComment"># fd</span>
<span id="L39" class="LineNr">39 </span>    -1/imm32  <span class="subxComment"># since MAP_ANONYMOUS is specified</span>
<span id="L40" class="LineNr">40 </span>    <span class="subxComment"># offset</span>
<span id="L41" class="LineNr">41 </span>    0/imm32  <span class="subxComment"># since MAP_ANONYMOUS is specified</span>
<span id="L42" class="LineNr">42 </span>
<span id="L43" class="LineNr">43 </span><span class="subxS2Comment"># . . vim&#0058;nowrap:textwidth=0</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->

                                  
                                       


















                                                                                                              
core_sources = \
	src/contact.c src/contact.h src/log.c src/common.c \
	src/log.h src/profanity.c src/common.h \
	src/profanity.h src/chat_session.c \
	src/chat_session.h src/muc.c src/muc.h src/jid.h src/jid.c \
	src/chat_state.h src/chat_state.c \
	src/resource.c src/resource.h \
	src/roster_list.c src/roster_list.h \
	src/xmpp/xmpp.h src/xmpp/capabilities.c src/xmpp/connection.c \
	src/xmpp/iq.c src/xmpp/message.c src/xmpp/presence.c src/xmpp/stanza.c \
	src/xmpp/stanza.h src/xmpp/message.h src/xmpp/iq.h src/xmpp/presence.h \
	src/xmpp/capabilities.h src/xmpp/connection.h \
	src/xmpp/roster.c src/xmpp/roster.h \
	src/xmpp/bookmark.c src/xmpp/bookmark.h \
	src/xmpp/form.c src/xmpp/form.h \
	src/server_events.c src/server_events.h \
	src/ui/ui.h src/ui/window.c src/ui/window.h src/ui/core.c \
	src/ui/titlebar.c src/ui/statusbar.c src/ui/inputwin.c \
	src/ui/titlebar.h src/ui/statusbar.h src/ui/inputwin.h \
	src/ui/console.c src/ui/notifier.c \
	src/ui/windows.c src/ui/windows.h \
	src/ui/rosterwin.c src/ui/occupantswin.c \
	src/ui/buffer.c src/ui/buffer.h \
	src/command/command.h src/command/command.c \
	src/command/commands.h src/command/commands.c \
	src/tools/parser.c \
	src/tools/parser.h \
	src/tools/p_sha1.h src/tools/p_sha1.c \
	src/tools/autocomplete.c src/tools/autocomplete.h \
	src/tools/history.c src/tools/history.h \
	src/tools/tinyurl.c src/tools/tinyurl.h \
	src/config/accounts.c src/config/accounts.h \
	src/config/account.c src/config/account.h \
	src/config/preferences.c src/config/preferences.h \
	src/config/theme.c src/config/theme.h

tests_sources = \
	src/contact.c src/contact.h src/common.c \
	src/log.h src/profanity.c src/common.h \
	src/profanity.h src/chat_session.c \
	src/chat_session.h src/muc.c src/muc.h src/jid.h src/jid.c \
	src/resource.c src/resource.h \
	src/chat_state.h src/chat_state.c \
	src/roster_list.c src/roster_list.h \
	src/xmpp/xmpp.h src/xmpp/form.c \
	src/ui/ui.h \
	src/command/command.h src/command/command.c \
	src/command/commands.h src/command/commands.c \
	src/tools/parser.c \
	src/tools/parser.h \
	src/tools/p_sha1.h src/tools/p_sha1.c \
	src/tools/autocomplete.c src/tools/autocomplete.h \
	src/tools/history.c src/tools/history.h \
	src/tools/tinyurl.c src/tools/tinyurl.h \
	src/config/accounts.h \
	src/config/account.c src/config/account.h \
	src/config/preferences.c src/config/preferences.h \
	src/config/theme.c src/config/theme.h \
	src/ui/windows.c src/ui/windows.h \
	src/ui/window.c src/ui/window.h \
	src/ui/buffer.c \
	src/ui/titlebar.c src/ui/statusbar.c src/ui/inputwin.c \
	src/ui/titlebar.h src/ui/statusbar.h src/ui/inputwin.h \
	src/server_events.c src/server_events.h \
	tests/xmpp/stub_xmpp.c \
	tests/otr/stub_otr.c \
	tests/ui/stub_ui.c \
	tests/log/stub_log.c \
	tests/config/stub_accounts.c \
	tests/helpers.c tests/helpers.h \
	tests/test_cmd_account.c tests/test_cmd_account.h \
	tests/test_cmd_alias.c tests/test_cmd_alias.h \
	tests/test_cmd_bookmark.c tests/test_cmd_bookmark.h \
	tests/test_cmd_connect.c tests/test_cmd_connect.h \
	tests/test_cmd_join.c tests/test_cmd_join.h \
	tests/test_cmd_otr.c tests/test_cmd_otr.h \
	tests/test_cmd_rooms.c tests/test_cmd_rooms.h \
	tests/test_cmd_roster.c tests/test_cmd_roster.h \
	tests/test_cmd_statuses.c tests/test_cmd_statuses.h \
	tests/test_cmd_sub.c tests/test_cmd_sub.h \
	tests/test_cmd_win.c tests/test_cmd_win.h \
	tests/test_cmd_disconnect.c tests/test_cmd_disconnect.h \
	tests/test_common.c tests/test_common.h \
	tests/test_contact.c tests/test_contact.h \
	tests/test_form.c tests/test_form.h \
	tests/test_history.c tests/test_history.h \
	tests/test_jid.c tests/test_jid.h \
	tests/test_muc.c tests/test_muc.h \
	tests/test_parser.c tests/test_parser.h \
	tests/test_preferences.c tests/test_preferences.h \
	tests/test_roster_list.c tests/test_roster_list.h \
	tests/test_server_events.c tests/test_server_events.h \
	tests/test_autocomplete.c tests/test_autocomplete.h \
	tests/test_chat_session.c tests/test_chat_session.h \
	tests/testsuite.c

main_source = src/main.c

git_include = src/gitversion.h

otr3_sources = \
	src/otr/otrlib.h src/otr/otrlibv3.c src/otr/otr.h src/otr/otr.c

otr4_sources = \
	src/otr/otrlib.h src/otr/otrlibv4.c src/otr/otr.h src/otr/otr.c

themes_sources = themes/*

script_sources = bootstrap.sh configure-debug install-all.sh

man_sources = docs/profanity.1

if BUILD_OTR
if BUILD_OTR3
core_sources += $(otr3_sources)
endif
if BUILD_OTR4
core_sources += $(otr4_sources)
endif
endif

bin_PROGRAMS = profanity
profanity_SOURCES = $(core_sources) $(main_source)
if THEMES_INSTALL
profanity_themesdir = @THEMES_PATH@
profanity_themes_DATA = $(themes_sources)
endif
if INCLUDE_GIT_VERSION
BUILT_SOURCES = $(git_include)
endif

TESTS = tests/testsuite
check_PROGRAMS = tests/testsuite
tests_testsuite_SOURCES = $(tests_sources)
tests_testsuite_LDADD = -lcmocka

man_MANS = $(man_sources)

EXTRA_DIST = $(man_sources) $(themes_sources) $(script_sources) profrc.example LICENSE.txt

if INCLUDE_GIT_VERSION
EXTRA_DIST += .git/HEAD .git/index

$(git_include).in: .git/HEAD .git/index
	rm -f $@
	echo "#ifndef PROF_GIT_BRANCH" >> $@
	echo "#define PROF_GIT_BRANCH \"$(shell git rev-parse --symbolic-full-name --abbrev-ref HEAD)\"" >> $@
	echo "#endif" >> $@
	echo "#ifndef PROF_GIT_REVISION" >> $@
	echo "#define PROF_GIT_REVISION \"$(shell git log --pretty=format:'%h' -n 1)\"" >> $@
	echo "#endif" >> $@

#
# Create $(git_include) atomically to catch possible race. The race can occur
# when $(git_include) is generated in parallel with building of src/profanity.c.
# So this hack allows to find and fix the problem earlier.
#
$(git_include): $(git_include).in
	cp $< $@

clean-local:
	rm -f $(git_include) $(git_include).in
endif